Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 从脚本调用的后台进程在结束后死亡_Shell_Cygwin_Background Process - Fatal编程技术网

Shell 从脚本调用的后台进程在结束后死亡

Shell 从脚本调用的后台进程在结束后死亡,shell,cygwin,background-process,Shell,Cygwin,Background Process,Cygwin身上发生了奇怪的事情。 我运行一个脚本,将一些进程放到后台。然而,一旦剧本结束,他们都死了 简单示例,以以下脚本为例: tail -f logfile.log & 我可以看到,尾部工作,它打印最后的X行,但一旦脚本结束,这个过程就不再是背景了 在Linux上它的行为不同,知道为什么吗?我会在Linux上尝试nohup*cmd*&的。但是您需要考虑传递给子级的文件描述符。那么nohup*cmd*/dev/null 2>&1&但是tail-f的输出会去哪里呢?退出外壳时,窗口是

Cygwin身上发生了奇怪的事情。 我运行一个脚本,将一些进程放到后台。然而,一旦剧本结束,他们都死了

简单示例,以以下脚本为例:

tail -f logfile.log &
我可以看到,尾部工作,它打印最后的X行,但一旦脚本结束,这个过程就不再是背景了


在Linux上它的行为不同,知道为什么吗?

我会在Linux上尝试nohup*cmd*&的。但是您需要考虑传递给子级的文件描述符。那么nohup*cmd*/dev/null 2>&1&但是tail-f的输出会去哪里呢?退出外壳时,窗口是否关闭?如果要查看输出,则无法退出shell。

cygwin窗口保持打开状态,以便在跟踪日志时查看日志。如果我直接从shell运行命令,而不是从shell中的脚本运行命令,那么一切都正常。但是当我把它们放到脚本中,然后在它运行之后,它就会退出。您可以选择脚本的源代码,也可以执行脚本。编写脚本源代码时,它由当前shell处理,因此命令的行为与直接在脚本中键入命令时相同。使用Scrpt来做这个。执行脚本时,当前shell将启动一个新shell来处理脚本中的命令。使用bash-Scpt或./Scpt执行此操作。此子shell将在退出时收获其子进程,即杀死并等待它启动的任何子进程退出,除非子进程保护自己不被其父进程杀死。Doug,这解决了问题,感谢您的精彩解释。我使用了./Scrpt而不是。这就是问题所在+1给你。试图在我的cygwin安装上复制这个,但我看不到你报告了什么。脚本退出后,tail仍在运行。