2017-04-05 68 views
0

Cygwin发生了一些奇怪的事情。 我运行一个脚本,把一些进程放到后台。然而,一旦脚本结束,它们都会死亡。从脚本调用的后台进程在它结束后死掉

简单的例子,利用这个脚本:

tail -f logfile.log & 

我可以看到尾部的作品(它打印最近的X线),但这个过程了,因为一旦脚本结束是不是在后台。

在Linux上,它的行为有所不同,为什么?

+0

试图在我的cygwin安装中重现这一点,而我没有看到你的报告。脚本退出后,尾巴仍在运行。 – ewindes

回答

1

我想在linux上尝试nohup *cmd* &。但是你需要考虑传递给孩子的文件描述符。所以nohup *cmd* </dev/null >/dev/null 2>&1 &tail -f输出将在哪里?退出外壳时窗口是否关闭?然后,如果您想查看输出,则不能退出shell。

+0

cygwin窗口保持打开状态,所以我可以在日志被查看时查看日志。如果我直接从shell运行命令而不是从shell中的脚本运行命令,则一切正常。但是当我把它们放在一个脚本中时,它在运行后会退出。 –

+1

有两种方法可以执行脚本的内容。您可以获取脚本的源代码,也可以执行脚本。当您编写脚本时,它将由当前shell处理,因此命令的行为与将其直接键入脚本时的行为相同。使用'。 Scrpt'来做到这一点。当您执行脚本时,当前shell会启动一个新的shell来处理脚本中的命令。使用'bash Scpt'或'。/ Scpt'来做到这一点。这个子shell会在子进程结束时收获子进程,即杀死并等待任何启动的子进程退出,除非子进程保护自己不被父进程杀死。 –

+0

Doug,那解决了这个问题,谢谢你的很好的解释。我正在使用./Scrpt而不是。 Scrpt和那是问题。 +1给你。 –

相关问题