如何在Linux中启动已停止的进程
答
除了@ Dave的回答,还有一个advanced method用于使用GDB重定向正在运行的程序的输入和输出文件描述符。
一个FreeBSD例如对于任意的外壳脚本具有PID 4711:
> gdb /bin/sh 4711
...
Attaching to program: /bin/sh, process 4711
...
(gdb) p close(1)
$1 = 0
(gdb) p creat("/tmp/testout.txt",0644)
$2 = 1
(gdb) p close(2)
$3 = 0
(gdb) p dup2(1,2)
$4 = 2
EDIT - 解释:这将关闭的文件句柄1,然后打开一个文件,该文件重用1。然后它关闭文件句柄2次重复文件句柄1到2.
现在这个过程'stdout
和stderr
转到指定的文件,并从那里读取。如果需要stdin
,则需要p close(0)
,然后附加一些输入文件或PIPE或smth。
目前,我找不到一种方法从控制终端远程disown
这个过程,这意味着当终端退出时,这个过程接收到SIGHUP
信号。
注意:如果您确实有/获得访问其他终端,您可以disown -a
,以便此过程将在终端关闭后继续运行。
+0
这是一个很酷的技术。我没有想过使用调试器重新路由STDOUT。 – 2011-05-11 15:51:05
属于http://unix.stackexchange.com。 – hammar 2011-05-09 22:12:25