当前位置: 技术问答>linux和unix
如何才能终止一个已经PID子进程的执行
来源: 互联网 发布时间:2016-02-16
本文导语: 如下产生的cpid子进程,在其中执行runit ,runit是个无限循环执行的操作,如何才能在父进程中根据需要停止该子进程的执行,而不影响父进程? cpid = fork(); if (cpid == 0) {//this is a child thre...
如下产生的cpid子进程,在其中执行runit ,runit是个无限循环执行的操作,如何才能在父进程中根据需要停止该子进程的执行,而不影响父进程?
cpid = fork();
if (cpid == 0)
{//this is a child thread
if (execv("./runit", argv) == -1) {
printf("errno: %dn",errno);
ERR("execv error!");
return FAILURE;
}
exit(0);
}
else
if (cpid>0)
{//this is parent thread
printf("child PID is %d.n",cpid);
wait(&status);
}
else
printf("Error run.n");
cpid = fork();
if (cpid == 0)
{//this is a child thread
if (execv("./runit", argv) == -1) {
printf("errno: %dn",errno);
ERR("execv error!");
return FAILURE;
}
exit(0);
}
else
if (cpid>0)
{//this is parent thread
printf("child PID is %d.n",cpid);
wait(&status);
}
else
printf("Error run.n");
|
if (cpid >0)
{
printf("child PID is %d.n",cpid);
sleep(3);
kill(cpid,SIGKILL); //杀死子进程
wait(&status)
{
printf("child PID is %d.n",cpid);
sleep(3);
kill(cpid,SIGKILL); //杀死子进程
wait(&status)
|
在子进程中收到终止进程的信号后,如何才能对应进行信号的检测和响应?
=================================================================
假定信号为SIGUSR2,进程可以这样处理
void signal_catch( int signo )
{
printf ( "i catch sigusr2");
关闭所有已打开的资源。
exit(0);
}
ChildProcess()
{
......
signal( SIGUSR2 , signal_catch);
......
}
=================================================================
假定信号为SIGUSR2,进程可以这样处理
void signal_catch( int signo )
{
printf ( "i catch sigusr2");
关闭所有已打开的资源。
exit(0);
}
ChildProcess()
{
......
signal( SIGUSR2 , signal_catch);
......
}