/*===============================================
* 文件名称:hw.c
* 创 建 者:
* 创建日期:2022年08月29日
* 描 述:
================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
int ret;
pid_t pid=fork();
if(pid<0)
{
perror("fork");
exit(-1);
}
if(pid==0)//子进程
{
raise(SIGSTOP);// 在子进程中使用raise()函数向自身发出SIGSTOP信号,使子进程暂停
exit(0);//正常运行导致退出程序
}
else if(pid>0)//父进程
{
printf("pid=%d\n",pid);
if(ret=waitpid(pid,NULL,WNOHANG|WUNTRACED)==0)/*WNOHANG 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若结束,则返回该子进程的ID。
WUNTRACED 若子进程进入暂停状态,则马上返回,但子进程的结束状态不予以理会。WIFSTOPPED(status)宏确定返回值是否对应与一个暂停子进程。*/
{
if(ret=kill(pid,SIGCHLD)==0);//捕获子进程退出信号//可以用其他的信号来测试
printf("kill%d\n",pid);
}
}
return 0;
}
测试: