2015年8月18日 星期二

[Linux] 在Linux上終端機如何背景執行程式教學



此篇主要是要講解如何再背景執行程式的方法。

---

簡單介紹


在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,預設就該執行緒就會被終結掉囉。






----

有想到再補充...


相關文章: (1) [仙境傳說]在ubuntu上運行OpenkoreTW教學

沒有留言:

張貼留言