2011-05-09 127 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

相關問題