GNU/Linux >> Belajar Linux >  >> Linux

Apakah ada cara untuk mendengarkan proses?

Satu -- pendekatan yang diakui berat -- adalah menggunakan strace :

$ strace -e trace=none -e signal=none -p 12345

akan menonton proses dengan PID 12345, tidak mencegat panggilan sistem (-e pertama ) dan tidak ada sinyal (-e kedua ). Setelah proses keluar dengan cara biasa, nilai keluar akan dicetak.

Jika proses diakhiri oleh sinyal, strace keluar secara diam-diam (saat dijalankan dengan opsi yang diberikan di atas). Anda dapat menggunakan mis. -e signal=kill untuk mengubah perilaku ini. Perhatikan, bahwa -e signal=all (atau, dengan kata lain, menghilangkan -e signal opsi) mungkin menghasilkan keluaran dalam jumlah besar jika sinyal diterima dan ditangani oleh program.


  1. Merangkai eksekusi "notify"

    $ process; notify $? &
    

    Perhatikan bahwa jika proses akan keluar dengan cara yang tidak terduga notify tidak akan dieksekusi

  2. Menyiapkan jebakan

    Proses ditandai oleh sinyal dari arti yang berbeda dan dapat bereaksi dengan tepat

    #!/bin/bash
    
    process
    
    function finish {
        notify $?
    }
    trap finish EXIT
    

Anda tidak jelas pemberitahuan apa yang ada dalam pikiran Anda. Intinya bisa apa saja yang membunyikan "bel" tentunya. Satu untuk banyak misalnya. notify-send dari libnotify perpustakaan.

$ process; notify-send "process finished with status $?" &

Bash melakukan ini untukmu. Ini akan memberi tahu Anda ketika proses berakhir dengan memberi Anda kontrol kembali dan akan menyimpan status keluar dalam variabel khusus $? . Kira-kira seperti ini:

someprocess
echo $?

Lihat manual bash tentang parameter khusus untuk informasi selengkapnya.

Tapi saya berasumsi bahwa Anda ingin melakukan pekerjaan lain sambil menunggu. Di bash Anda bisa melakukannya seperti ini:

someprocess &
otherwork
wait %+
echo $?

someprocess & akan memulai proses di latar belakang. Itu berarti kontrol akan segera kembali dan Anda dapat melakukan pekerjaan lain. Proses yang dimulai di latar belakang disebut pekerjaan di bash. wait akan menunggu pekerjaan yang diberikan selesai dan kemudian mengembalikan status keluar dari pekerjaan itu. Pekerjaan direferensikan oleh %n . %+ mengacu pada pekerjaan terakhir dimulai. Lihat manual bash tentang kontrol tugas untuk informasi lebih lanjut.

Jika Anda benar-benar membutuhkan PID, Anda juga dapat melakukannya seperti ini:

someprocess &
PID=$!
otherwork
wait $PID
echo $?

$! adalah variabel khusus yang berisi PID dari proses latar belakang yang terakhir dimulai.


Linux
  1. Apakah ada cara untuk mengubah variabel lingkungan dari proses lain di Unix?

  2. Apakah ada cara untuk mengonversi dari UTF8 ke ISO-8859-1?

  3. Apakah ada cara untuk mengganti nama proyek Cargo?

  1. Apakah ada cara untuk me-restart badblock?

  2. Apakah ada cara untuk membatasi konsumsi CPU secara keseluruhan?

  3. Apakah ada cara untuk memilih beberapa kondisi di `ps`?

  1. Cara Portabel (posix) Untuk Mencapai Substitusi Proses?

  2. Apakah ada cara untuk 'uniq' dengan kolom?

  3. Bunuh proses yang berjalan di port 80