如何使用信号处理程序来停止和恢复子进程?



我试图使用信号处理程序函数停止并恢复子进程,我的代码如下,但结果似乎没有达到我想要的,为什么?

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include<sys/wait.h>
#include <unistd.h>
#include <sys/types.h>
#define ERR_EXIT(m)                     
do                                              
{                                               
perror(m);                      
exit(EXIT_FAILURE);     
}while(0)
#define MAXLINE 100
pid_t global_pid = -1; // global
void stop(int signo) 
{
printf("catch the signo: %d, which is the 0xcc interruptionn",signo); 
kill(global_pid,SIGSTOP); 

printf("resume child processn");
kill(global_pid,SIGCONT); 
}
int main()
{
printf("before fork, pid = %dn",getpid());

signal(5,(void(*)(int))stop); 

global_pid = fork(); 

if(pid == -1) 
{
ERR_EXIT("fork errorn");
}

if(pid > 0)
{

printf("This is parent pid = % d child pid = %dn",getpid(),pid);

sleep(5); 

}else if(pid == 0)
{

printf("This is child pid = %d parent pid = %dn",getpid(),getppid());
asm volatile("int3"); 
printf("The child continued.n");

}

return 0;
}

结果如下:子进程未成功恢复。谁能告诉我该怎么做?

before fork, pid = 128943

父pid = 128943子pid = 128944

这是子pid = 128944父pid = 128943

捕获信号:5,这是0xcc中断

[1] +停了下来* *

子节点捕获信号。在子进程中,global_pid为零,因此您正在向进程组发送信号。

最新更新