如何才能终止一个已经PID子进程的执行

IT晓夏 2007-10-23 03:38:12
如下产生的cpid子进程,在其中执行runit ,runit是个无限循环执行的操作,如何才能在父进程中根据需要停止该子进程的执行,而不影响父进程?
cpid = fork();
if (cpid == 0)
{//this is a child thread
if (execv("./runit", argv) == -1) {
printf("errno: %d\n",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");
...全文
373 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangfly 2007-10-25
  • 打赏
  • 举报
回复
学习
NC 2007-10-23
  • 打赏
  • 举报
回复
在子进程中收到终止进程的信号后,如何才能对应进行信号的检测和响应?
=================================================================
假定信号为SIGUSR2,进程可以这样处理

void signal_catch( int signo )
{
printf ( "i catch sigusr2");
关闭所有已打开的资源。
exit(0);
}

ChildProcess()
{
......
signal( SIGUSR2 , signal_catch);
......
}
cceczjxy 2007-10-23
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
char *ptr="1234567890";
char *p;
int count=0;
void sigroutine(int signo){
if(*p)
{
signal(SIGVTALRM, sigroutine);
printf("%c",*p++);
fflush(stdout);
return ;
}
struct itimerval value2;

value2.it_value.tv_sec = 0;
value2.it_value.tv_usec = 0;
value2.it_interval.tv_sec = 0;
value2.it_interval.tv_usec = 0;
setitimer(ITIMER_VIRTUAL, &value2, NULL);
count=1;
}

int main()
{
struct itimerval value, ovalue, value2; //(1)
signal(SIGVTALRM, sigroutine);
value2.it_value.tv_sec = 0;
value2.it_value.tv_usec = 500000;
value2.it_interval.tv_sec = 0;
value2.it_interval.tv_usec = 500000;
setitimer(ITIMER_VIRTUAL, &value2, &ovalue);
p=ptr;
for(;;)
{
if((count % 10) == 1)
{
printf("ok!\n");
break;
}
}

}


IT晓夏 2007-10-23
  • 打赏
  • 举报
回复
在子进程中收到终止进程的信号后,如何才能对应进行信号的检测和响应?
cceczjxy 2007-10-23
  • 打赏
  • 举报
回复
if (cpid >0)
{
printf("child PID is %d.\n",cpid);
sleep(3);
kill(cpid,SIGKILL); //杀死子进程
wait(&status)

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧