重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
pause()会令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断。
创新互联是一家专业提供铁东企业网站建设,专注与成都做网站、成都网站建设、H5高端网站建设、小程序制作等业务。10年已为铁东众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
当50信号触动了,pause将退出睡眠状态,执行printf和return
fork的时候不是可以得到子进程的pid吗,以后每隔5分钟,就使用kill函数来查看该子进程是否活着,具体的用法如下:
fork();
......
//判断是否活着
//如果子进程pid是***的话,则kill用法如下:
int ret=kill(***,0);
if(ret == 0 )
{ 子进程活着 }
else
{ 子进程死了}
你是程序中调用kill函数,还是在命令行调用kill命令?
int kill(pid_t pid, int sig); 函数有两个参数,一个是进程号,一个是信号
如果你输入的进程号是正确的,而进程还在,则信号有可能被该进程忽略了,不知道你发送的信号是几号? 只有SIGKILL SIGSTOP不能被忽略,其它都可以忽略或捕捉。
线程
可以用pthread_kill函数
传递信号SIGSTOP挂起
传递SIGCONT 恢复
进程
调用系统的stop挂起
或者用kill -stop 挂起
类似的 用SIGCONT 恢复。
给你一个完整的测试代码:
--------------------------
#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..
....................................