2011-05-09 43 views
5

我在给定的终端在Linux中已停止进程。现在我在另一个终端。我如何开始这个过程。我会发送什么样的杀手信号。我拥有这个过程。如何在Linux中启动已停止的进程

+0

属于http://unix.stackexchange.com。 – hammar 2011-05-09 22:12:25

回答

8

您可以发出一个kill -CONT pid,只要另一个终端会话仍在,它将执行您想要的操作。如果另一个会话死了,它可能没有任何地方放置输出。

+0

+1为了给我正确的答案,我的过于草率,不正确的答案! – idz 2011-05-09 22:19:30

+0

我会试试这个。谢谢。 – abc 2011-05-09 22:32:17

4

除了@ 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.

现在这个过程'stdoutstderr转到指定的文件,并从那里读取。如果需要stdin,则需要p close(0),然后附加一些输入文件或PIPE或smth。

目前,我找不到一种方法从控制终端远程disown这个过程,这意味着当终端退出时,这个过程接收到SIGHUP信号。

注意:如果您确实有/获得访问其他终端,您可以disown -a,以便此过程将在终端关闭后继续运行。

+0

这是一个很酷的技术。我没有想过使用调试器重新路由STDOUT。 – 2011-05-11 15:51:05

相关问题