我在给定终端的Linux中停止了进程。现在我在另一个航站楼。我该如何开始这个过程。我会发送什么杀戮信号。我拥有这个过程。
答案 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。
现在,此过程“stdout
和stderr
转到指定的文件,并且可以从那里读取。如果需要stdin
,则需要p close(0)
,然后附加一些输入文件或PIPE或smth。
目前,我找不到从控制终端远程disown
此过程的方法,这意味着当终端退出时,此过程会收到SIGHUP
信号。
注意:如果您拥有/获得对其他终端的访问权限,您可以disown -a
以便在终端关闭后此流程继续运行。