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

时间:2011-05-09 22:06:39

标签: linux bash shell

我在给定终端的Linux中停止了进程。现在我在另一个航站楼。我该如何开始这个过程。我会发送什么杀戮信号。我拥有这个过程。

2 个答案:

答案 0 :(得分:8)

您可以发出一个kill -CONT pid,只要其他终端会话仍然存在,它就可以执行您想要的操作。如果其他会话已经死亡,那么可能无法输出任何内容。

答案 1 :(得分:4)

除了@ Dave的答案之外,还有一个advanced method来使用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),然后附加一些输入文件或PIPE或smth。

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

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