首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Linux C中父进程退出时,使用什么方法可使子进程退出?该如何解决

2012-03-22 
Linux C中父进程退出时,使用什么方法可使子进程退出?Linux C中父进程退出时,使用什么方法可使子进程退出:

Linux C中父进程退出时,使用什么方法可使子进程退出?
Linux C中父进程退出时,使用什么方法可使子进程退出:

我的程序大致是这样的:

C/C++ code
int main(){int parameter;//其他进程通过消息队列给parameter传递参数while(1){    if(parameter==1)        {          return 0;        }        else if(parameter==2)       {         if (!fork()) {                printf("Hello!\n") ;                    }        }    else{          continue;        }  }}


当parameter=1的时候则程序结束;
当parameter=2的时候创建子进程;
当有parameter不断传过来的时候就不断有子进程创建。

当智能通过传递参数来结束程序时,程序就会退出,问题是:

☆☆程序退出时,该如何结束这些子进程?请各位给分析分析,谢谢!



[解决办法]
1. 等所有子进程退出后,父进程再退出。
2. 发signal杀死子进程。
[解决办法]
探讨

1. 等所有子进程退出后,父进程再退出。
2. 发signal杀死子进程。

[解决办法]
fork() 之后的全部,直到遇到exit,或者main()函数返回
[解决办法]
在lz的场景中,如果杀死所有的残留子进程,可以使用
kill(0, SIGTERM);

这样会给同组的所有进程发送SIGTERM信号
[解决办法]
kill(pid,SIG_KILL);
调用kill函数,参数是子进程ID,另一个参数忘了
[解决办法]
使用waitpid(pid_t pid,int *status,int options)函数
函数说明:waitpid会暂时停止目前的执行,直到有信号来到或者子进程结束。
具体参数说明自己百度一下waitpid 函数
[解决办法]
pid_t pid = fork()

if (pid > 0) {
// 在父进程中 这个时候 pid 是子进程的 pid 值
kill (pid, SIGTERM); // 发送 SIGTERM 信号给子进程 默认操作处理为 “game over”
} else if (pid == 0) {
// 子进程 中
} else {
// 创建子进程失败
}

// 当然父进程中最好处理一下 SIG_CHLD 信号

热点排行