实例中首先使用fork() 创建一个子进程, 在父进程调用kill() 之前, 在子进程中使用raise() 向自身发送SIGSTOP信号,是子进程暂停。接下来使用kill()向子进程发送信号
代码:
ngnsvr9 [** NONE **]/home/xionghailong/example $ cat kill_raise.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
int ret;
if ((pid = fork()) < 0)
{
printf("fork error! \n");
exit(1);
}
if (pid == 0)
{
printf("child pid: %d is waiting for any signal\n", getpid());
raise(SIGSTOP);
exit(0);
}
else
{
if ((waitpid(pid, NULL, WNOHANG)) == 0)
{
if ((ret = kill(pid, SIGKILL)) == 0)
{
printf("parent kill %d \n", pid);
}
}
waitpid(pid, NULL, 0);
exit(0);
}
}
编译运行:
ngnsvr9 [** NONE **]/home/xionghailong/example $ gcc kill_raise.c -o kill_raise
ngnsvr9 [** NONE **]/home/xionghailong/example $ ./kill_raise
child pid: 546 is waiting for any signal
parent kill 546