如何正确地向子进程发送 SIGTSTP 信号?
How to correctly send SIGTSTP signal to a child process?
我正在为执行 fork() 和 exec() 的作业编写自定义 shell 程序。我想要做的是处理信号 SIGTSPS 以便它挂起子进程。
我目前正在使用
处理 crtl z
void SIGTSTP_Handler(){
if (child != 0) {
kill(child, SIGTSTP);
}
}
我的父进程 waitpid 与
if (waitpid(child, &status, WUNTRACED |WCONTINUED ) == -1) {
err(-1, "Failed to waitpid()");
}
if(WIFSTOPPED(status))
{
printf("child stop with code: %d\n", WIFSTOPPED(status));
}
当我按下 ctrl Z 时,我的进程停止但它以代码 1 退出。这意味着错误。如果我向它传递 CONT 信号,我希望能够暂停子进程并恢复它。我如何正确地传递 ctrl Z 以便它挂起子进程,如果我输入 fg 它将把挂起进程放回 运行?
sleep 10
PID 71740: I must be the parent!
^Z
71740child stop with code: 1
您的 child 进程已停止,未退出。如果它已经退出,WIFSTOPPED(status) 将为 0,WIFEXITED(status) 将为非零。
要继续该过程,请在执行 fg
命令时,将 SIGCONT
信号发送到 child:
kill(child, SIGCONT)
我正在为执行 fork() 和 exec() 的作业编写自定义 shell 程序。我想要做的是处理信号 SIGTSPS 以便它挂起子进程。
我目前正在使用
处理 crtl z void SIGTSTP_Handler(){
if (child != 0) {
kill(child, SIGTSTP);
}
}
我的父进程 waitpid 与
if (waitpid(child, &status, WUNTRACED |WCONTINUED ) == -1) {
err(-1, "Failed to waitpid()");
}
if(WIFSTOPPED(status))
{
printf("child stop with code: %d\n", WIFSTOPPED(status));
}
当我按下 ctrl Z 时,我的进程停止但它以代码 1 退出。这意味着错误。如果我向它传递 CONT 信号,我希望能够暂停子进程并恢复它。我如何正确地传递 ctrl Z 以便它挂起子进程,如果我输入 fg 它将把挂起进程放回 运行?
sleep 10
PID 71740: I must be the parent!
^Z
71740child stop with code: 1
您的 child 进程已停止,未退出。如果它已经退出,WIFSTOPPED(status) 将为 0,WIFEXITED(status) 将为非零。
要继续该过程,请在执行 fg
命令时,将 SIGCONT
信号发送到 child:
kill(child, SIGCONT)