Ada lebih banyak info di /proc/<pid>Linux, lihat saja.
Di Unix lain, segalanya mungkin berbeda. The psperintah akan bekerja di mana-mana, yang /prochal ini OS tertentu. Misalnya pada AIX tidak ada cmdlinedi /proc.
cat /proc/<pid>/cmdlinejuga berfungsi di Cygwin, di mana argumen garis cmd tidak ditampilkan psdengan opsi apa pun.
lechup
3
Di Linux, jika Anda hanya perlu mendapatkan args, perintahnya adalah ps -o args -p <pid>dan itu hanya akan mencetak argsatau menggunakan -o cmdjika Anda hanya perlu melihatnya cmd. Mencoba membaca /proc/<pid>/cmdlinetidak akan selalu berhasil untuk pengguna yang tidak memiliki privasi. The psutilitas akan bekerja.
alvits
2
Petunjuk: panjangnya /proc/<pid>/cmdlineterbatas (kode keras untuk nilai parameter kernel PAGE_SIZE), jadi lebih lama baris perintah masih ditampilkan terpotong! Lihat stackoverflow.com/questions/199130/… untuk info lebih lanjut. Anda dapat menanyakan pengaturan kernel Anda getconf PAGE_SIZE, biasanya 4096.
t0r0X
61
Ini akan melakukan trik:
xargs -0 < /proc/<pid>/cmdline
Tanpa xargs, tidak akan ada spasi di antara argumen, karena mereka telah dikonversi ke NUL.
@bdonlan Ah, saya tidak memeriksanya. Tangkapan yang bagus!
lothar
4
xargs -0 echo </ proc / <pid> / cmdline. Anda juga dapat melakukan ini dengan / proc / <pid> / environment, meskipun Anda mungkin ingin menambahkan -n 1 untuk itu.
camh
Pada sistem saya tidak ada / proc filesystem :( ada solusi lain?
Hemant
Tambang adalah proses java dengan parameter yang sangat panjang. Ini masih memotong output saya. Adakah saran?
johnsam
14
Anda dapat menggunakan pgrepdengan -f(baris perintah penuh) dan -l(deskripsi panjang):
pgrep -l -f PatternOfProcess
Metode ini memiliki perbedaan penting dengan salah satu respons lain: ia bekerja di CygWin , sehingga Anda dapat menggunakannya untuk mendapatkan baris perintah penuh dari setiap proses yang berjalan di Windows (dieksekusi sebagai terangkat jika Anda ingin data tentang proses yang ditinggikan / admin) . Metode lain untuk melakukan ini pada Windows lebih canggung ( misalnya ).
Selanjutnya: dalam pengujian saya, cara pgrep telah menjadi satu-satunya sistem yang bekerja untuk mendapatkan path lengkap untuk skrip yang berjalan di dalam python Cygwin .
Yang ini sebenarnya juga mencetak nama yang dapat dieksekusi asli:$ exec -a fakename bash & [1] 14102 [1]+ Stopped exec -a fakename bash $ xargs -0 < /proc/14102/cmdline; fakename $ pgrep -l -f fakename; 14102 bash
unhammer
Tidak berfungsi untuk saya menggunakan pgrep from procps-ng 3.3.15dan 3.3.12. Hanya mencetak nama pid dan prorgam tanpa argumen.
Socowi
4
Varian pencetakan lainnya /proc/PID/cmdline dengan spasi di Linux adalah:
cat -v /proc/PID/cmdline | sed 's/\^@/\ /g' && echo
Dengan cara ini catmencetak karakter NULL sebagai ^@dan kemudian Anda menggantinya dengan spasi menggunakan sed; echomencetak baris baru.
FYI, Anda juga bisa menggunakan cat -v / proc / PID / cmdline | sed 's / \ ^ @ / \ n / g' . Ini akan menggantikan karakter nol dengan karakter baris baru. Dengan demikian, setiap argumen akan dicetak ke barisnya sendiri. Dengan begitu, lebih mudah untuk mengatakan satu argumen dari yang lain.
Selain semua cara di atas untuk mengonversi teks, jika Anda cukup menggunakan 'string', itu akan membuat output pada baris yang terpisah secara default. Dengan manfaat tambahan itu juga dapat mencegah karakter apa pun yang dapat mengacak terminal Anda muncul.
Keduanya menghasilkan dalam satu perintah:
string / proc // cmdline / proc // environment
Pertanyaan sebenarnya adalah ... apakah ada cara untuk melihat baris perintah sebenarnya dari suatu proses di Linux yang telah diubah sehingga cmdline berisi teks yang diubah dan bukan perintah sebenarnya yang dijalankan.
Jika Anda ingin mendapatkan panjang-sebagai-mungkin (tidak yakin apa yang membatasi ada), mirip dengan Solaris' pargs , Anda dapat menggunakan ini di Linux & OSX:
tr \\0 ' ' < /proc/<pid>/cmdline
Jawaban:
Ada beberapa opsi:
Ada lebih banyak info di
/proc/<pid>
Linux, lihat saja.Di Unix lain, segalanya mungkin berbeda. The
ps
perintah akan bekerja di mana-mana, yang/proc
hal ini OS tertentu. Misalnya pada AIX tidak adacmdline
di/proc
.sumber
ps -ww -fp <pid>
) untuk menentukan output lebar karena jika ada beberapa perintah, mereka bisa terputus.-ww
pilihan memungkinkan akses ke argumen baris perintah penuh (sebanyak disimpan oleh kernel). Lihat Juga: bagaimana solaris dan bsd mendapatkan parameter commandline yang tidak digunakan untuk proses dan opsi pscat /proc/<pid>/cmdline
juga berfungsi di Cygwin, di mana argumen garis cmd tidak ditampilkanps
dengan opsi apa pun.args
, perintahnya adalahps -o args -p <pid>
dan itu hanya akan mencetakargs
atau menggunakan -ocmd
jika Anda hanya perlu melihatnyacmd
. Mencoba membaca/proc/<pid>/cmdline
tidak akan selalu berhasil untuk pengguna yang tidak memiliki privasi. Theps
utilitas akan bekerja./proc/<pid>/cmdline
terbatas (kode keras untuk nilai parameter kernel PAGE_SIZE), jadi lebih lama baris perintah masih ditampilkan terpotong! Lihat stackoverflow.com/questions/199130/… untuk info lebih lanjut. Anda dapat menanyakan pengaturan kernel Andagetconf PAGE_SIZE
, biasanya 4096.Ini akan melakukan trik:
Tanpa xargs, tidak akan ada spasi di antara argumen, karena mereka telah dikonversi ke NUL.
sumber
xargs -0 < /proc/<pid>/cmdline
.Baris perintah penuh
Untuk Sistem Linux & Unix dapat Anda gunakan
ps -ef | grep process_name
untuk mendapatkan baris perintah penuh.Pada sistem SunOS, jika Anda ingin mendapatkan baris perintah penuh, Anda dapat menggunakannya
Untuk mendapatkan baris perintah penuh, Anda harus menjadi pengguna super.
Daftar argumen
akan memberikan daftar terperinci argumen yang diteruskan ke suatu proses. Ini akan menampilkan array argumen seperti ini:
Saya tidak menemukan perintah serupa untuk Linux, tetapi saya akan menggunakan perintah berikut untuk mendapatkan hasil yang serupa:
sumber
Di Linux
dapatkan baris perintah dari proses (termasuk args) tetapi dengan semua spasi putih berubah menjadi karakter NUL.
sumber
Anda dapat menggunakan
pgrep
dengan-f
(baris perintah penuh) dan-l
(deskripsi panjang):Metode ini memiliki perbedaan penting dengan salah satu respons lain: ia bekerja di CygWin , sehingga Anda dapat menggunakannya untuk mendapatkan baris perintah penuh dari setiap proses yang berjalan di Windows (dieksekusi sebagai terangkat jika Anda ingin data tentang proses yang ditinggikan / admin) . Metode lain untuk melakukan ini pada Windows lebih canggung ( misalnya ).
Selanjutnya: dalam pengujian saya, cara pgrep telah menjadi satu-satunya sistem yang bekerja untuk mendapatkan path lengkap untuk skrip yang berjalan di dalam python Cygwin .
sumber
$ exec -a fakename bash & [1] 14102 [1]+ Stopped exec -a fakename bash $ xargs -0 < /proc/14102/cmdline; fakename $ pgrep -l -f fakename; 14102 bash
pgrep from procps-ng 3.3.15
dan3.3.12
. Hanya mencetak nama pid dan prorgam tanpa argumen.Varian pencetakan lainnya
/proc/PID/cmdline
dengan spasi di Linux adalah:Dengan cara ini
cat
mencetak karakter NULL sebagai^@
dan kemudian Anda menggantinya dengan spasi menggunakansed
;echo
mencetak baris baru.sumber
Anda cukup menggunakan:
sumber
Daripada menggunakan banyak perintah untuk mengedit aliran, cukup gunakan satu - tr menerjemahkan satu karakter ke yang lain:
sumber
Selain semua cara di atas untuk mengonversi teks, jika Anda cukup menggunakan 'string', itu akan membuat output pada baris yang terpisah secara default. Dengan manfaat tambahan itu juga dapat mencegah karakter apa pun yang dapat mengacak terminal Anda muncul.
Keduanya menghasilkan dalam satu perintah:
string / proc // cmdline / proc // environment
Pertanyaan sebenarnya adalah ... apakah ada cara untuk melihat baris perintah sebenarnya dari suatu proses di Linux yang telah diubah sehingga cmdline berisi teks yang diubah dan bukan perintah sebenarnya yang dijalankan.
sumber
Tentang Solaris
serupa dapat digunakan pada sistem seperti unix.
sumber
Di Linux, dengan bash, untuk menampilkan seperti yang dikutip args sehingga Anda dapat mengedit perintah dan menjalankannya kembali
Di Solaris, dengan bash (diuji dengan 3.2.51 (1) -release) dan tanpa gnu userland:
Contoh Linux bash (tempel di terminal):
Keluaran:
Contoh Solaris Bash:
Keluaran:
sumber
Jika Anda ingin mendapatkan panjang-sebagai-mungkin (tidak yakin apa yang membatasi ada), mirip dengan Solaris' pargs , Anda dapat menggunakan ini di Linux & OSX:
sumber
coba
ps -n
di terminal linux. Ini akan menunjukkan:1. Semua proses MENJALANKAN , baris perintah dan PID mereka
Setelah itu Anda akan tahu proses untuk membunuh yang mana
sumber