如何在Linux中启动一个已停止的进程

5

我在Linux的一个终端上有一个停止的进程。现在我在另一个终端上。我该如何启动这个进程?我应该发送什么kill信号?我拥有这个进程。


适合发布在http://unix.stackexchange.com上。 - hammar
2个回答

8

如果其他终端会话仍然存在,您可以发出kill -CONT pid命令来达到您想要的效果。 如果其他会话已经关闭,则可能没有任何地方放置输出。


+1 因为你给出了正确的答案,而我匆忙且错误的回答被取代了! - idz

4
除了@Dave的回答之外,使用GDB有一种高级方法可以重定向正在运行程序的输入和输出文件描述符。具体步骤可参考此处
下面是针对PID为4711的任意shell脚本的FreeBSD示例:
> 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

编辑 - 解释:这将关闭文件句柄1,然后打开一个文件,重用了1。然后它关闭文件句柄2并将文件句柄1复制到2。

现在,这个进程的stdoutstderr会流向指定的文件,并且可以从那里读取。如果需要stdin,则需要p close(0),然后连接一些输入文件或管道等。

目前为止,我找不到一种方法来远程disown这个进程,使其脱离控制终端,这意味着当终端退出时,这个进程会收到SIGHUP信号。

注意:如果您有/获得对其他终端的访问权限,则可以使用disown -a,以便在终端关闭后,此进程将继续运行。


这是一个很酷的技术。我没有想到可以使用调试器来重新路由STDOUT。 - Dave Orr

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