有没有一种方法可以恢复/恢复 nohup 以在控制台中查看输出?

8

我知道机会非常低,但有没有一种方法可以查看最近输出的nohup进程?

我仍然打开这个进程,但是将所有输出重定向到/dev/null。

那么,有没有办法将这样的进程恢复到控制台,还是无望了 :(

干杯

1个回答

8

有一种方法,但它不是直接的。诀窍是使用dup2,这取决于您的程序是否链接到libc(所有C/C++应用程序都会链接到libc,但Java应用程序不会)

  1. 使用gdb附加到您的进程
  2. 在gdb提示符下运行以下命令将stdout重定向到/tmp/newfile

    $ print dup2(open("/tmp/newfile",0), 1)

  3. 运行以下命令将stderr重定向到/tmp/newfile

    $ print dup2(open("/tmp/newfile",0), 2)

  4. 从您的进程中分离gdb,然后完成

dup2的作用是

复制文件描述符 这意味着stdout/stderr(1和2)和打开返回的新文件描述符可以互换使用,这将导致所有输出都发送到您打开的文件。


太棒了!从没想过那个。 - clstrfsck
如果托管JVM是针对libc构建的或具有兼容的stdout概念,我认为这也适用于Java。 - Chris Stratton
值得一试,我在考虑附加到JVM中的Java进程,但是附加到JVM是一种不同的方法。 - hhafez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接