相关疑难解决方法(0)

如果我启动一个后台进程然后注销,它会继续运行吗?

在与同事长时间讨论后提出这个问题,我真的很想在这里澄清一下。

我启动了一个后台进程,通过将“ &”附加到命令行或通过CTRL-Z使用“ bg”停止并在后台恢复它。然后我退出。

发生什么了?

我们很确定它应该被 SIGHUP 杀死,但这并没有发生;再次登录后,该进程愉快地运行并pstree显示它已被“采用”init.

这是预期的行为吗?

但是,如果是,那么nohup命令的目的是什么?看起来这个过程无论如何都不会被杀死,不管有没有它......


编辑 1

更多细节:

  • 该命令是从 SSH 会话启动的,而不是从物理控制台启动的。
  • 该命令是在没有 nohup和/或的情况下启动的&;然后它被暂停CTRL-Z并在后台恢复bg
  • ssh 会话没有下降。有一个实际的注销 ("exit ”命令)。
  • 这个过程是一个 scp文件复制操作。
  • 再次登录后,pstree显示进程正在运行并且是init.

编辑 2

更清楚地说明问题:是否将进程置于后台(使用&bg)使其 ignore SIGHUP,就像nohup命令一样?


编辑 3

我尝试手动发送一个SIGHUPto scp: 它退出了,所以它绝对不会忽略信号。

然后我再次尝试启动它,将它放在后台并注销:它被“采用”init并继续运行,当我重新登录时我在那里找到了它。

我现在很困惑。看起来SIGHUP在注销时根本没有发送。

linux bash process background

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

如何在 bash 中使用“nohup”和“&”正确以另一个用户身份运行程序

在过去的几个月里,我一直在学习 bash 和 linux 管理,同时生成越来越多需要在后台运行的代码。理想情况下,我希望将我的开发系统运行在离生产环境更近的地方,以避免由于安全和权限问题而不得不重新开发代码。

一般来说,我会运行一些东西:

$nohup <program> <program args> >> <program logfile> 2>&1 &
Run Code Online (Sandbox Code Playgroud)

IE:

$nohup ping 192.168.0.1 >> ping.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但是,今天我尝试通过创建一个用户并授予他们正确的权限来正确设置它,以便只能访问他们自己的文件而不能访问其他任何内容。这似乎是一种明智的安全做法。

我会这样做:

$sudo -u <program user> nohup <program> <program args> >> <program logfile> 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时,这会导致以下输出ps aux | grep <program>

<admin user>@server:~$ ps aux | grep <program>
root      1396  0.0  0.0  61868  3792 pts/38   S    10:50   0:00 sudo -u <program user> nohup <program> <program args>
<program user>  1397  0.0  0.8 1273232 68308 pts/38 …
Run Code Online (Sandbox Code Playgroud)

linux bash nohup background-process

0
推荐指数
1
解决办法
3871
查看次数

标签 统计

bash ×2

linux ×2

background ×1

background-process ×1

nohup ×1

process ×1