给你一个完整的测试代码:
在行唐等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、成都网站建设 网站设计制作按需求定制网站,公司网站建设,企业网站建设,品牌网站建设,营销型网站,成都外贸网站建设,行唐网站建设费用合理。
--------------------------
#include stdio.h
#include sys/types.h
#include unistd.h
#include signal.h
#include stdlib.h
void handler(int signo)
{
printf("recv the signal from parent process\n");
}
int main()
{
pid_t pid;
pid = fork();
switch(pid)
{
case -1:
perror("fork failed");
exit(1);
case 0:
printf("in the child\n");
signal(SIGCONT, handler);
pause();
printf("child weakup\n");
break;
default:
printf("in the parent\n");
sleep(5);
kill(pid, SIGCONT);
sleep(5);
printf("parent weakup\n");
break;
}
printf("bye..\n");
exit(0);
}
--------------------------------------------------
运行及输出:
beyes@linux-beyes:~/C ./weakup.exe
in the child
in the parent
recv the signal from parent process
child weakup
bye..
parent weakup
bye..
....................................
你是程序中调用kill函数,还是在命令行调用kill命令?
int kill(pid_t pid, int sig); 函数有两个参数,一个是进程号,一个是信号
如果你输入的进程号是正确的,而进程还在,则信号有可能被该进程忽略了,不知道你发送的信号是几号? 只有SIGKILL SIGSTOP不能被忽略,其它都可以忽略或捕捉。
pause()会令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断。
当50信号触动了,pause将退出睡眠状态,执行printf和return
fork的时候不是可以得到子进程的pid吗,以后每隔5分钟,就使用kill函数来查看该子进程是否活着,具体的用法如下:
fork();
......
//判断是否活着
//如果子进程pid是***的话,则kill用法如下:
int ret=kill(***,0);
if(ret == 0 )
{ 子进程活着 }
else
{ 子进程死了}