我试图使用信号处理程序函数停止并恢复子进程,我的代码如下,但结果似乎没有达到我想要的,为什么?
#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为零,因此您正在向进程组发送信号。