我有一种情况,我无法在 Linux RHEL 6.6 框中运行 nohup -p <processid>,它说不支持此选项。我阅读了联机帮助页,在 Linux 中它只有 --help--version 作为 Linux 中的选项。
nohup -p 是否还有其他选择,以允许已经运行的进程在运行终端退出后继续存在?

最佳答案

其中一部分很简单:要从 shell 的进程表中删除作业,您可以使用 disown

不容易的部分是将 stdout 和 stderr 重定向到远离 TTY。为此,您可以使用 gdb 来控制进程并告诉它替换 stdin、stdout 和 stderr(请注意,您需要确保在其他同样需要在退出操作):

# for an instance of /path/to/program with PID 1234

# note that this is intended to be a transcript of content typed at a prompt -- it isn't a
# working shell script, since the commands after "gdb" are to be run *by gdb*, not the
# shell.

gdb /path/to/program
attach 1234
p dup2(open("/dev/null", 1), 0)
p dup2(open("stdout-file", 1), 1)
p dup2(open("stderr-file", 1), 2)
detach
quit

这个 has been automated 作为一个名为 dupx 的工具。

关于linux - `nohup` 通过 PID 处理一个已经在运行的进程(类似于 AIX nohup -p),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38512194/

10-13 08:54