此篇主要是要講解如何再背景執行程式的方法。
---
簡單介紹
在Linux上,如果直接在終端機下開啟程式,該tty得stdin、stdout與stderr就會被導向至該執行緒上。而且如果該tty關閉,該tty正運行的前景(Foreground)程式也同時會被結束掉。
如果是在一般圖形化的Linux OS可能無所謂,再開一個終端機就好啦~但是如果今天是要運行在只有command line的環境時該怎麼做呢?
---
如何背景執行
想要達到開多個背景程式有兩種方法:
方法(一)、在執行程式時,加入&符號
例如: perl ./openkore.pl &
如此一來,該程式一執行就是被放背景運行,就算將終端機關閉也不會被強制終止的唷!
方法(二)、 執行程式後,透過Ctrl+Z送SIGSTOP訊號
這個方法是將程式正常啟動後,透過Ctrl+Z送SIGSTOP訊號進入該終端機所執行中的前景程式,讓該程式強制暫停,然後透過bg 指令將該程式在背景執行。
以上這兩種方法都可以達到讓程式背景執行唷!
那麼要怎麼把程式從背景抓回來前景的?來看看以下教學吧。
---
如何將程式從背景切換回前景
STEP 1. 使用 jobs 指令觀察該tty有哪些工作
STEP 2. 使用 fg 指令將指定的工作帶回前景
透過這兩個步驟就可以將程式叫回前景拉!如此一來該終端機的stdin又可以被導回你所執行的前景程式啦。
---
額外提醒
Q1. 如果啟動程式的終端機已經關閉,卻想要再次對該執行緒的stdin、stdout做讀寫該怎麼辦呢?
A1. 這個功能類似TTY Sniffer,這邊有點懶得打。不過基本上就是將該process的stdin、stdout轉向到一個自己設定的FIFO Pipe做讀寫。目前這邊有點懶得寫教學,如果真的有需要未來想做紀錄再打篇文章分享。這邊可以先參考下列文章:Redirecting Output from a Running Process
-
Q2. 如何看到目前有哪些執行緒被執行了呢?
A2. 使用ps指令再搭配aux參數就可以看到囉!
-
Q3. 如何關閉其他tty所開啟的程式呢?
A3. 使用kill在加上PID就可以囉!
假如我要終止PID為2389的程式,如下圖:
使用kill 2389後,該執行緒就會收到SIGTERM,預設就該執行緒就會被終結掉囉。
----
沒有留言:
張貼留言