相关疑难解决方法(0)

如果您已经使用 '&' 分叉,什么时候需要 'nohup'?

首先这个问题是相关的,但绝对不同于这个非常好的问题:

nohup、disown 和 & 之间的区别

我想了解一些事情:当我做 '&' 时,我是在分叉吗?

做“nohup ... &”是否有用,或者只是&足够?

有人可以展示您使用“&”但仍想使用“nohup”的情况吗?

shell nohup fork

32
推荐指数
2
解决办法
3万
查看次数

bash 的 shopt huponexit 何时开始默认关闭?

星期一早上,我登录到一个框ssh并运行以下命令:

tail -f /var/log/foo/bar.log | grep something_interesting &
Run Code Online (Sandbox Code Playgroud)

在当天晚些时候的某个时候,我按 Ctrl+D 注销。

星期五,我登录到同一个盒子,发现tail进程仍在运行。当我退出时,我期待他们退出。

经进一步深挖,似乎shopt huponexit被设置为off在那个盒子,并且在一切其他的Linux机器我试过,并在一台Mac OS X盒我试过。

这什么时候开始默认为off,而不是on

bash nohup history

8
推荐指数
1
解决办法
1451
查看次数

进程在后台启动之前被杀死

我正在使用一个script.sh包含命令的 bash 脚本cmd,在后台启动:

#!/bin/bash
…
cmd &
…
Run Code Online (Sandbox Code Playgroud)

如果我打开终端模拟器并运行script.sh,cmd会按预期在后台正确执行。即,whilescript.sh已结束,cmd继续在后台运行,PPID 为 1。

但是,如果我打开另一个终端仿真程序(让说的xfce4终端)从以前的一个(或在桌面会话的开始,这是我的真实使用情况下),并执行script.sh

xfce4-terminal -H -x script.sh
Run Code Online (Sandbox Code Playgroud)

cmd不再正确执行:它被终止script.sh。使用nohup来防止这种情况是不够的。我必须sleep在它之后放一个命令,否则在与它分离之前被cmd终止script.sh

我发现,做的唯一途径cmd背景正确执行是把set -mscript.sh。为什么在这种情况下是必要的,而不是第一个?为什么这两种执行方式script.sh(以及因此cmd)之间的行为存在差异?

我认为,在第一种情况下,监控模式激活,如一个可以通过将看到set -oscript.sh

shell terminal-emulator job-control background-process xfce4-terminal

6
推荐指数
1
解决办法
574
查看次数

bash 的否认是如何运作的?

在 Linux 系统上,bash 内置命令disown可用于从当前会话中删除作业。bash 是如何实现这个功能的呢?这里使用setsid()了,如果使用了,那么bash是如何触发子进程调用的呢setsid()?它使用信号吗?

bash disown

3
推荐指数
1
解决办法
1335
查看次数