Jika saya memiliki nomor PID untuk suatu proses (pada mesin UNIX), bagaimana saya bisa mengetahui nama proses terkait?
Apa yang harus saya lakukan?
ps -fp PIDakan menampilkan perintah penuh
Jika saya memiliki nomor PID untuk suatu proses (pada mesin UNIX), bagaimana saya bisa mengetahui nama proses terkait?
Apa yang harus saya lakukan?
ps -fp PIDakan menampilkan perintah penuh
Jawaban:
Pada semua sistem yang mendukung POSIX, dan dengan Linux, Anda dapat menggunakan ps:
ps -p 1337 -o comm=
Di sini, proses dipilih oleh PID dengan -p. The -opilihan menentukan format output, commyang berarti nama perintah.
Lihat juga: ps- Spesifikasi Basis Grup Terbuka Masalah 6
commandbukan perbaikan itu.
$ ps -p 1 -o comm= init $ ps -p 1 -o command= / sbin / init; yang artinya bukan sekitar 15 karakter, mungkin hanya nama biner vs. path lengkapnya.
commberikan nama biner dan commandkembalikan argumen 0
Anda dapat menemukan nama proses atau perintah yang digunakan oleh id-proses atau pid dari
/proc/pid/cmdline
dengan melakukan
cat /proc/pid/cmdline
Di sini pid adalah pid yang ingin Anda cari nama
Untuk exmaple:
# ps aux
................
................
user 2480 0.0 1.2 119100 12728 pts/0 Sl 22:42 0:01 gnome-terminal
................
................
Untuk menemukan nama proses yang digunakan oleh pid 2480 Anda dapat menggunakan
# cat /proc/2480/cmdline
gnome-terminal
Untuk mendapatkan jalur program menggunakan pid tertentu, Anda dapat menggunakan:
ps ax|egrep "^ [PID]"
atau Anda dapat menggunakan:
ps -a [PID]
ps -adaftar semua proses yang terkait dengan terminal, tidak mengambil input apa pun.
psversi, procps version 3.2.7bekerja dengan baik.
# ls -la /proc/ID_GOES_HERE/exe
Contoh:
# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai 5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop
readlink /proc/1337/exe. readlink - cetak tautan simbolik yang diselesaikan atau nama file kanonik.
Anda dapat menggunakan pmap. Saya mencari PID 6649. Dan memotong detail proses ekstra.
$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
psperintah semua Anda hanya akan melihat java, tetapi sisa parameter yang dilewati akan ditampilkan sepenuhnya dengan pmap.
Anda juga dapat menggunakan awk dalam kombinasi dengan ps
ps aux | awk '$2 == PID number for a process { print $0 }'
contoh:
root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
untuk mencetak HEAD LINE yang bisa Anda gunakan
ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
(or)
ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'
root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
ps ax | grep 1dan lihat apakah itu benar-benar mengembalikan initproses, misalnya. (Dalam kasus saya, ia mengembalikan 119 baris — tidak diinginkan.)
ps aux | awk 'NR==1 || $2==PID'- dan tidak perlu mengatakan {print $0}karena itu adalah default. Tapi seperti yang Anda komentari, -pitu lebih baik.
Mirip dengan Jawaban slhck , tetapi mengandalkan operasi file alih-alih permintaan perintah:
MYPID=1
cat "/proc/$MYPID/comm"
cat /proc/1/comm=> init, bukan / sbin / init. Jawabannya menyertakan versi yang lebih panjang. Tapi +1 tetap.
Anehnya, tidak ada yang menyebutkan opsi -f (perintah penuh) untuk ps. Saya suka menggunakannya dengan -e (semuanya) dan menyalurkan hasilnya ke grep sehingga saya dapat mempersempit pencarian saya.
ps -ef | grep <PID>
Ini juga sangat berguna untuk melihat perintah penuh yang dijalankan seseorang yang mengambil banyak sumber daya di sistem Anda. Ini akan menunjukkan kepada Anda opsi dan argumen yang diteruskan ke perintah.
-e -ftersedia, grepdapat menghasilkan banyak kecocokan salah, misalnya grep 33termasuk pid = 933 atau 339, ppid = 33 atau 933 atau 339, waktu 33 detik atau 33 menit, atau nama program atau argumen yang mengandung 33 - termasuk grepdirinya sendiri. Semua (AFAIK) psmiliki -p, jadi adil ps -fp 33.
Saya menemukan metode termudah untuk menjadi dengan perintah berikut:
ps -awxs | grep pid
ps -p${pid}, ini akan mengambil banyak positif palsu - termasuk grepitu sendiri.
buat skrip sederhana untuk menemukan PID dan gunakan dalam skrip bash ...
gunakan dengan hati-hati !!
Tangkapan layar: http://pastebin.com/Cm9YH67U

André
psatauls -l /proc/$PID/exe