关于system 调用shell 产生sh进程,如何把sh进程关掉...

xhd3767 2009-11-05 02:01:59
#include <stdio.h>
void amendHeadOfConfig(int number)
{
char commandStr[40];
sprintf(commandStr,"sed \'1 c %d\' 1.txt > temp.txt",number);
printf("commandStr: %s\n",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进程也退出呢???
请赐教..
...全文
846 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pottichu 2009-11-06
  • 打赏
  • 举报
回复
这个很有可能并不是 system 引起的。


如果用 fork + execl 或者 popen, 就有可能引起, 但 system 不会。
你查查你的程序, 是不是有其他地方有 这些调用?
  • 打赏
  • 举报
回复
fork+execl
你说的sh进程会在任务完毕后退出。

你说的现象之有可能该进程没有执行完你的任务。
xhd3767 2009-11-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pottichu 的回复:]
这个很有可能并不是 system 引起的。
如果用 fork + execl  或者 popen, 就有可能引起, 但 system 不会。
你查查你的程序, 是不是有其他地方有 这些调用?
[/Quote]

ok! 我去check的时候没有用到fork之类的..用到的popen 也是打开相应的shell命令,然后去读数据..(也就是说我的shell命令执行完毕 他会自动地退出,不用我waitpid()..)
当然我用system执行shell的时候肯定是执行完的..
xhd3767 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hulihong 的回复:]
理论上是退出的。
[/Quote]
我也这么想的..偶然间发现的..难道是假象???
xhd3767 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eclipse_2 的回复:]
system 是fork exec waitpid的组合
sh进程执行完了之后 会被主进程收回的
可能是你的主进程一直在while死循环导致的吧
[/Quote]
我有必要每次都去call waitpid吗??
xhd3767 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pottichu 的回复:]
sh 进程或者说命令执行完了就会自己退出。。。。 不存在你说的情况阿。

你什么系统 ?
[/Quote]
在我们公司的目标版上面,mips + linux内核2.6.28.10。
因为我要维护一个文件里面的东西,有个while(1);
然后有修改的话调用shell sed修改某一行数据。用ctrl +c 结束掉后去看ps,有很多sh. 估计是由于system调用脚本引起的..难道不是???
HULIHONG 2009-11-05
  • 打赏
  • 举报
回复
理论上是退出的。
wangqingshui531 2009-11-05
  • 打赏
  • 举报
回复
其实已经退出了。

我在aix机器上测试,system之后,sh已经退出。

不知道楼主怎么测试的?
怎么查看进程依然存在
dongjiawei316 2009-11-05
  • 打赏
  • 举报
回复
按说命令执行完后就退出了吧!
小魔菇 2009-11-05
  • 打赏
  • 举报
回复
system 是fork exec waitpid的组合
sh进程执行完了之后 会被主进程收回的
可能是你的主进程一直在while死循环导致的吧
pottichu 2009-11-05
  • 打赏
  • 举报
回复
sh 进程或者说命令执行完了就会自己退出。。。。 不存在你说的情况阿。

你什么系统 ?

23,107

社区成员

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

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