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

在给定的terminal上,我在Linux中停止了一个进程。 现在我在另一个terminal。 我如何开始这个过程。 我会发送什么信号。 我拥有这个过程。

你可以发一个kill -CONT pid,只要另一个终端会话还在,它就会做你想做的事情。 如果另一个会话已经结束,则可能没有任何地方放置输出。

除了@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) ,然后附加一些输入文件或PIPE或smth。

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

注意:如果您确实拥有/进入另一个终端,则可以disown -a以便终端关闭后此过程继续运行。