如何在给定pid的远程机器上恢复停止的作业?

Noe*_*Yap 9 linux shell

我在一台停止的机器上有一个进程(使用Ctrl-Z).ssh'ing到机器后,我该如何恢复这个过程?

Adr*_*onk 11

您需要找到PID,然后发出kill -CONT <pid>.

您可以通过使用ps某些选项来生成扩展输出来查找PID .已停止的作业TSTAT(或S)列中有一个.

如果你成功继续这个过程,但它不再有一个控制终端(它需要一个),那么它可能会挂起或进入一个循环:只要密切关注它的CPU使用情况.

  • 这个(`kill -CONT ...`)通常是正确的技巧,但要注意另外两件事:(1)这会稍微混淆其父shell(让我们称之为*P*为Parent),这不会引起注意该过程(让我们称之为*T*,对于sTopped)已经继续,所以*P*认为*T*仍然停止.(2)如果进程*T**仍然附加到其控制终端并尝试执行某些"tty ops",则shell将不会传输*terminal*的控制组信息​​,*T*将立即停止再次使用`SIGTTIN`或`SIGTTOU`. (2认同)

jh3*_*314 8

您可以输入fg以恢复流程. 如果您有多个进程,则可以键入fg processname(例如fg vim)或fg job_id.

要查找作业ID,请使用该jobs命令.

维基百科关于它的作用的相关引用:

fg是Unix和类Unix操作系统中的作业控制命令,它通过将挂起的进程置于前台来重新执行挂起的进程,从而将其标准输入和输出流重定向到用户的终端.

  • @jh314:`jobs`是一个内置的shell(必然如此,因为作业号是该进程的本地编号)所以他必须能够访问运行shell的终端,否则需要"非" -shell"简历.如果您事先进行设置(例如,使用"屏幕")或具有远程桌面访问权限,这是可能的,但他试图在没有这些的情况下执行此操作. (2认同)