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