Re: [問題] process id in linux

作者: brianhsu (墳墓)   2015-11-11 09:19:04
※ 引述《Jaymainal (發呆中)》之銘言:
: 在linux 有 ps -ef | grep processName 可以查 到pid
: 我的processName 是個外部程式
: 想請問這個指令有辦法用java實作而不使用其他library嗎
: 有找到一個方式
: http://superuser.com/questions/635258/ps-ef-grep-java-using-java-program
: 但是要另外包 apache.commons.jar
: 或者有其他可以取得其他外部process id 的方式嗎
: 謝謝
想到的幾個方法:
1. 和 dBus 或其他 daemon 一樣,你的 processName 自己把 PID
寫到 /var/run/processName.pid 裡去,然後 Java 程式直接
讀這個檔案。
2. 和你給的 Link 一樣,直接呼叫外部的 ps -ef 指令,但是
IOUtils.copy 那段自己做,那邊基本上就是不斷讀 ps -ef
的 InputStream 然後丟到 grep 的 OutputStream。也就是
| 符號在做的事。
3. 因為 ps -ef 的指令的輸出是有固定格式和欄位的,所以一
樣用 Runtime.exec 執行 ps -ef 後,讀他的 InputStream
出來,每次讀一行進來,再用 line.split("\\s+") 切,最
後你再依照相對的欄位過濾出哪一行是你的 processName
就可以找到 PID 了。
作者: Jaymainal (發呆中)   2015-11-11 09:38:00
謝謝我也是2的方式我倒是不知道 | 就是outputStream只是覺得很奇怪 為啥不能一起打 因為單純ps -ef 可以讀
作者: bitlife (BIT一生)   2015-11-11 15:41:00
樓上原原po可以試試 /proc 目錄下,每個數字目錄打開讀取exe 或 cmdline 檔案簡單講就是自己利用/proc當ps,至於grep就是parse上述2檔合於所需的就抓出來用
作者: Jaymainal (發呆中)   2015-11-13 09:43:00
謝謝樓上 我會玩玩看

Links booklink

Contact Us: admin [ a t ] ucptt.com