当前位置: 技术问答>linux和unix
大家好!请教一个关于LINUX进程调度的问题
来源: 互联网 发布时间:2016-09-15
本文导语: 问题是这样的; 使用fork()创建出子进程,伪代码如下: int pid = fork(); if(pid ==0) { system("..."); } 如此创建出一个子进程后,父进程和子进程都在运行;而且在子进程中的system也调用了1个另外的进程; 我现在遇...
问题是这样的;
使用fork()创建出子进程,伪代码如下:
如此创建出一个子进程后,父进程和子进程都在运行;而且在子进程中的system也调用了1个另外的进程;
我现在遇到的问题就是我妄想在我的主程序中使用kill(id,SIGTERM);来结束掉这个子进程,而不干扰父进程;但是结果确是子进程和我的主程序都被关闭了;望高手指教!
注:kill(pid,SIGTERM)中的id,是从if(pid == 0)中用getpid()取出来的,我输出来看了下一直是0。而且我发现如果在if(pid == 0)中getppid()得出的父进程也是0。
使用fork()创建出子进程,伪代码如下:
int pid = fork();
if(pid ==0)
{
system("...");
}
如此创建出一个子进程后,父进程和子进程都在运行;而且在子进程中的system也调用了1个另外的进程;
我现在遇到的问题就是我妄想在我的主程序中使用kill(id,SIGTERM);来结束掉这个子进程,而不干扰父进程;但是结果确是子进程和我的主程序都被关闭了;望高手指教!
注:kill(pid,SIGTERM)中的id,是从if(pid == 0)中用getpid()取出来的,我输出来看了下一直是0。而且我发现如果在if(pid == 0)中getppid()得出的父进程也是0。
|
kill(pid,SIGTERM)中的id,是从if(pid == 0)中用getpid()取出来的
--------------------------------------------
父子进程之间不可共享变量,你应该使用fork的返回值,对于父进程,fork返回子进程pid
--------------------------------------------
父子进程之间不可共享变量,你应该使用fork的返回值,对于父进程,fork返回子进程pid
|
|
system 本身又fork了子进程
nt system(const char * string);
函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
=-1:出现错误
=0:调用成功但是没有出现子进程
>0:成功退出的子进程的id
建议用exec函数族
|
最简单笨拙的方法,你可以kill的时候指定进程名称嘛
|
exec 函数族,不会再新开子进程,而是直接替换掉这个进程的代码
而且system很容易转换成exec
而且system很容易转换成exec
|
开新进程用exec
|
pid_t pid;
pid = fork()
if (pid == 0) {
execlp(...);
exit(126);
} else {
sleep(1);
kill(pid, SIGTERM);
}