我目前正在运行带有&标志的流程.
$ example &
Run Code Online (Sandbox Code Playgroud)
然而,(请注意我是Linux的新手)我意识到在这样的命令之后差不多一秒钟我得到一个注释,我的进程收到一个停止的信号.如果我做
$ jobs
Run Code Online (Sandbox Code Playgroud)
我将使用我的示例流程获取列表,并附上一个"停止"的小注释.它真的停了下来而且根本没有工作吗?它是如何工作的?我从互联网上获得了混合信息.
twa*_*erg 68
在Linux和其他Unix系统中,在后台运行的,但仍然有一个工作的stdin(或std::cin)用其控制终端相关联的(又名它运行在窗口)将被发送的SIGTTIN信号,其由缺省导致程序待用户将其置于前台(fg %job或类似)以允许实际输入到程序之前完全停止.为避免程序以这种方式暂停,您可以:
stdin通道不再与终端关联,通过将其重定向到具有适当程序输入内容的文件,或者/dev/null如果它确实不需要输入 - 例如myprogram < /dev/null &.stdin消失.但是这将导致a SIGHUP被传递到程序(意味着输入/输出通道经历"挂断") - 这通常导致程序被终止,但是这可以通过使用nohup- 例如nohup myprogram &.如果您对捕获程序的输出感兴趣,这可能是最好的选择,因为它可以防止上述两种信号(以及其他几种信号),并保存输出供您查看以确定是否程序执行有任何问题:
nohup myprogram < /dev/null > ${HOME}/myprogram.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18763 次 |
| 最近记录: |