如何让sell脚本执行另一个程序后正常退出?

blueflame 2004-04-06 03:54:45
譬如:
# cat aaa
#! /bin/sh
/tmp/a.out
exit
# ./aaa

其中,a.out不会自动退出执行
做完如上操作后,进程aaa依旧存在,且ppid为1(成为了孤儿进程?)如何让sell脚本执行另一个程序后正常退出?

谢谢!
...全文
72 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueflame 2004-04-08
  • 打赏
  • 举报
回复
to esunxingjian(宇翔):
呵呵,你没注意到我这句“其中,a.out不会自动退出执行”
你随便写个最简单的诸如
#include <stdio.h>
void main(void)
{
setbuf(stdout, NULL);
while (1) {
printf("a");
sleep(1);
}
}
的小程序就会看到我之前提到的现象了

to passingguy(贝多芬作品13号第二乐章):
谢谢你的解释,终于明白是为什么了^_^
esunxingjian 2004-04-07
  • 打赏
  • 举报
回复
你的a.out是什么
为什么我没有出现你的问题呢?
我的a.out就是简单的输出一句话,\你试一试!
passingguy 2004-04-07
  • 打赏
  • 举报
回复
你的代码是串行的
#! /bin/sh
a.out
exit
这个时候shell进程会等待a.out进程结束,也就是SIGCHLD信号(相当于c里面调用wait)

你如果改成
#! /bin/sh
a.out &
exit
这个时候shell进程不会等待a.out结束(相当于调用waitpid并且设置不阻塞)
blueflame 2004-04-06
  • 打赏
  • 举报
回复
我懂得c中的进程关系
可是用shell script去做这件事的时候,它同样产生了aaa的子进程a.out(可从a.out的ppid看得出),但很明显它没有象c程序那样A fork 出 B 后可以直接exit,而是aaa一直没有退出,且它的父进程成了1,shell到底是怎么处理的?
bluesky35 2004-04-06
  • 打赏
  • 举报
回复
一个进程退出后会用exit(0),另一个进程可以通过取得退出时的ID的方法判断前一个进程是否退出!
blueflame 2004-04-06
  • 打赏
  • 举报
回复
呵呵,谢谢楼上的
我问的目的不是为了知道如何让a.out在后台运行,而是想知道我问题里的现象是因为什么原因造成的,且这种现象该如何解决
格利高里 2004-04-06
  • 打赏
  • 举报
回复
用nohup /tmp/a.out &看看

23,110

社区成员

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

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