Jika saya melihat proses berjalan menggunakan ps, bagaimana saya bisa menemukan executable?

11

Jika saya dapat melihat proses berjalan menggunakan ps -e, bagaimana saya bisa menemukan file yang meluncurkannya?

interstar
sumber
2
OS apa ini? Linux, BSD, Solaris ...
Patrick
linux ... tetapi solusi cross-unix diterima.
interstar

Jawaban:

15

Di Linux: jika Anda tahu PID, Anda bisa menyimpan file cmdline untuk file itu. Misalnya:

cat /proc/PID/cmdline

Ini mungkin akan gagal jika biner dipindahkan setelah program dimulai.

Dan tentu saja:

lsof -n | grep PID | grep ' txt '

dan:

ls -la /proc/PID/exe

yang merupakan tautan simbolis ke executable.

Folkert van Heusden
sumber
1
Catatan yang /proc/PID/cmdlinetidak memiliki karakter baris baru, jadi Anda mungkin ingin melakukan sesuatu seperti cat /proc/PID/cmdline ; echo ''.
Keith Thompson
Sebenarnya, ia memiliki karakter NUL yang memisahkan argumen, sehingga Anda mungkin menginginkan sesuatu yang lebih rumit sepertitr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson
2

Salin id proses dari ps -eperintah dan kemudian jalankan yang berikut:

ps x | grep <process-id>
Aditya Patawari
sumber
Bukankah itu akan gagal jika aplikasi mengedit argv [0]? iirc sendmail melakukan itu.
Folkert van Heusden
Ya, itu adalah probabilitas. Tidak ada yang kurang ini berguna hampir setiap waktu.
Aditya Patawari
0

Tak satu pun dari metode ( ls, lsofatau cat) dalam jawaban lain bekerja untuk saya. Bila saya lakukan:

$ nano test.txt

Ini adalah pemenang saya ,:

$ pgrep -f -l test
3074 nano test.txt

Atau, untuk mendapatkan hanya PID untuk menggunakannya dalam pemrograman:

$ pgrep -f test
3074

Diuji pada Kali Linux v1.0.6 (berbasis Debian).
Dibandingkan dengan yang sederhana ls, saya harus akui itu bukan solusi yang sangat portabel, tetapi setidaknya itu berfungsi.

Sopalajo de Arrierez
sumber