父进程向子进程发送暂停/恢复信号的相关技术咨询
父进程暂停/恢复子进程的信号说明
当然存在这样的信号!在类Unix系统中,父进程完全可以通过标准信号来控制子进程的暂停与恢复:
暂停子进程的信号:
SIGSTOP
这个信号是强制暂停进程的“硬暂停”信号,它不能被捕获、忽略或者阻塞,能确保子进程一定会进入暂停状态,可靠性拉满。恢复子进程的信号:
SIGCONT
不管子进程是被SIGSTOP强制暂停,还是被SIGTSTP(比如终端按Ctrl+Z触发的可捕获暂停信号)暂停,发送SIGCONT信号都能让它从暂停的位置继续运行。
实际使用示例
命令行场景
假设你有一个PID为1234的子进程在后台运行,你可以用kill命令手动发送信号:
# 暂停子进程 kill -STOP 1234 # 恢复子进程运行 kill -CONT 1234
C代码场景
父进程通过kill()函数发送信号控制子进程:
#include <signal.h> #include <unistd.h> #include <stdio.h> int main() { pid_t child_pid = fork(); if (child_pid == 0) { // 子进程持续输出运行状态 while(1) { printf("子进程正在运行...\n"); sleep(1); } } else { // 父进程先让子进程跑3秒 sleep(3); // 发送暂停信号 kill(child_pid, SIGSTOP); printf("已暂停子进程\n"); // 等待5秒后恢复 sleep(5); kill(child_pid, SIGCONT); printf("已恢复子进程\n"); // 最后终止子进程 sleep(3); kill(child_pid, SIGTERM); } return 0; }
补充说明:SIGTSTP也是一种暂停信号,但它允许进程捕获或忽略,所以如果需要强制暂停子进程,SIGSTOP是更稳妥的选择。
内容的提问来源于stack exchange,提问作者user11210665
相关产品推荐
相关产品推荐

