GNU/Linux >> Belajar Linux >  >> Linux

Linux:Bagaimana cara mengetahui di mana suatu proses dimulai dan bagaimana proses itu dimulai?

Solusi 1:

Cara paling andal adalah dengan melihat /proc dir untuk prosesnya. Setiap proses memiliki /proc/<pid>/ direktori tempat menyimpan informasi seperti:

  1. cwd tautan ke direktori kerja saat ini
  2. fd dir dengan link ke file yang terbuka (deskriptor file)
  3. cmdline bacalah untuk melihat baris perintah apa yang digunakan untuk memulai proses
  4. environ variabel lingkungan untuk proses itu
  5. root 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.


Linux
  1. Cara mematikan proses zombie di Linux

  2. Bagaimana saya membuang OS lama saya dan beralih ke Linux

  3. Bagaimana Anda memulai Linux?

  1. Cara Memulai Perintah Linux di Latar Belakang dan Melepaskan Proses di Terminal

  2. Bagaimana cara mengetahui di mana suatu program macet di linux?

  3. Bagaimana saya tahu jika server Linux saya telah diretas?

  1. Cara Menemukan dan Membunuh Proses Zombie di Linux

  2. Cara menginstal vtop di Linux

  3. Bagaimana saya bisa mencatat semua peluncuran proses di Linux?