当前位置: 技术问答>linux和unix
关于system 调用shell 产生sh进程,如何把sh进程关掉...
来源: 互联网 发布时间:2016-07-13
本文导语: #include void amendHeadOfConfig(int number) { char commandStr[40]; sprintf(commandStr,"sed '1 c %d' 1.txt > temp.txt",number); printf("commandStr: %sn",commandStr); system(commandStr); system("rm -f 1.txt"); ...
#include
void amendHeadOfConfig(int number)
{
char commandStr[40];
sprintf(commandStr,"sed '1 c %d' 1.txt > temp.txt",number);
printf("commandStr: %sn",commandStr);
system(commandStr);
system("rm -f 1.txt");
system("mv temp.txt 1.txt");
}
int main()
{
amendHeadOfConfig(5);
while(1);
}
每次调用system 都会产生一个sh的进程。如果程序不退出 就会一直产生sh的进程。
怎样才能在退出之前把由system调用sh的进程退出掉。
如上面的程度。我看ps的时候一直会有三个sh在跑..
如何调用一个system后,相应的sh进程也退出呢???
请赐教..
void amendHeadOfConfig(int number)
{
char commandStr[40];
sprintf(commandStr,"sed '1 c %d' 1.txt > temp.txt",number);
printf("commandStr: %sn",commandStr);
system(commandStr);
system("rm -f 1.txt");
system("mv temp.txt 1.txt");
}
int main()
{
amendHeadOfConfig(5);
while(1);
}
每次调用system 都会产生一个sh的进程。如果程序不退出 就会一直产生sh的进程。
怎样才能在退出之前把由system调用sh的进程退出掉。
如上面的程度。我看ps的时候一直会有三个sh在跑..
如何调用一个system后,相应的sh进程也退出呢???
请赐教..
|
sh 进程或者说命令执行完了就会自己退出。。。。 不存在你说的情况阿。
你什么系统 ?
你什么系统 ?
|
fork+execl
你说的sh进程会在任务完毕后退出。
你说的现象之有可能该进程没有执行完你的任务。
你说的sh进程会在任务完毕后退出。
你说的现象之有可能该进程没有执行完你的任务。
|
这个很有可能并不是 system 引起的。
如果用 fork + execl 或者 popen, 就有可能引起, 但 system 不会。
你查查你的程序, 是不是有其他地方有 这些调用?
如果用 fork + execl 或者 popen, 就有可能引起, 但 system 不会。
你查查你的程序, 是不是有其他地方有 这些调用?
|
system 是fork exec waitpid的组合
sh进程执行完了之后 会被主进程收回的
可能是你的主进程一直在while死循环导致的吧
sh进程执行完了之后 会被主进程收回的
可能是你的主进程一直在while死循环导致的吧
|
按说命令执行完后就退出了吧!
|
其实已经退出了。
我在aix机器上测试,system之后,sh已经退出。
不知道楼主怎么测试的?
怎么查看进程依然存在
我在aix机器上测试,system之后,sh已经退出。
不知道楼主怎么测试的?
怎么查看进程依然存在
|
理论上是退出的。