func()函数返回一个进程ID,SIGHUP是signal信号中的一种处理方式,系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。
创新互联公司技术团队10多年来致力于为客户提供成都网站制作、网站设计、品牌网站制作、成都全网营销、搜索引擎SEO优化等服务。经过多年发展,公司拥有经验丰富的技术团队,先后服务、推广了成百上千家网站,包括各类中小企业、企事单位、高校等机构单位。
pause()会令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断。
当50信号触动了,pause将退出睡眠状态,执行printf和return
给你一个完整的测试代码:
--------------------------
#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不能被忽略,其它都可以忽略或捕捉。