Solusi 1:
Cara paling andal adalah dengan melihat /proc
dir untuk prosesnya. Setiap proses memiliki /proc/<pid>/
direktori tempat menyimpan informasi seperti:
cwd
tautan ke direktori kerja saat inifd
dir dengan link ke file yang terbuka (deskriptor file)cmdline
bacalah untuk melihat baris perintah apa yang digunakan untuk memulai prosesenviron
variabel lingkungan untuk proses ituroot
tautan ke apa yang dianggap oleh proses sebagai direktori root (ini akan / kecuali di-chroot)
Ada lebih banyak info keren di setiap proses / proc, tetapi dengan yang di atas Anda akan dapat mengetahui dengan tepat apa yang sedang terjadi.
Juga, menggunakan ps auxf
akan menunjukkan kepada Anda siapa yang bercabang apa sehingga Anda bisa mendapatkan ide yang lebih baik siapa yang memanggil perl Anda.
Solusi 2:
Dalam kebanyakan kasus hanya menjalankan ps
biasanya cukup, bersama dengan bendera favorit Anda untuk mengaktifkan keluaran lebar. Saya condong ke ps -feww
, tetapi saran lain di sini akan berhasil. Perhatikan bahwa jika sebuah program dimulai dari $PATH
seseorang , Anda hanya akan melihat nama yang dapat dieksekusi, bukan jalur lengkap. Misalnya, coba ini:
$ lftp &
$ ps -feww | grep ftp
lars 9600 9504 0 11:30 pts/10 00:00:00 lftp
lars 9620 9504 0 11:31 pts/10 00:00:00 grep ftp
Penting untuk dicatat bahwa informasi terlihat di ps
dapat sepenuhnya ditimpa oleh program yang sedang berjalan. Misalnya, kode ini:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
Jika saya mengkompilasi ini menjadi file bernama "myprogram" dan menjalankannya:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
Dan kemudian jalankan ps
, saya akan melihat nama proses yang berbeda:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
Anda juga dapat melihat langsung di /proc/<pid>/exe
, yang mungkin merupakan symlink ke executable yang sesuai. Dalam contoh di atas, ini memberi Anda informasi yang jauh lebih berguna daripada ps
:
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
Solusi 3:
bagi saya, baru saja, saya menemukan bahwa pstree
memberikan indikasi yang jauh lebih jelas tentang bagaimana suatu proses dimulai, daripada ps aux
tampilannya seperti ini:
├─lightdm─┬─Xorg
│ ├─lightdm─┬─init─┬─apache2───2*[apache2───26*[{apache2}]]
│ │ │ ├─at-spi-bus-laun─┬─dbus-daemon
│ │ │ │ └─3*[{at-spi-bus-laun}]
│ │ │ ├─at-spi2-registr───{at-spi2-registr}
│ │ │ ├─dbus-daemon
│ │ │ ├─dropbox───29*[{dropbox} ]
Solusi 4:
Anda dapat menggunakan:
systemctl status <PID>
atau dengan nama prosesnya:
systemctl status $(pgrep perl)
Ini akan mengirimkan informasi tentang layanan sistemd yang memulai proses Anda.
Saya menemukan petunjuk ini di sini
Solusi 5:
Coba ps axww | grep perl
untuk mendapatkan baris perintah lengkap dari proses Anda. Sepertinya top
baru saja memangkas garis panjang.