Saya memiliki dua contoh proses yang sedang berjalan. Salah satunya adalah "BEGITU OUT!" dan mencetak kesalahan tanpa henti ke STDOUT.
Saya ingin membunuh proses yang rusak tetapi saya harus memastikan saya tidak mengakhiri yang salah. Keduanya dimulai pada saat yang sama dan menggunakan top
saya bisa melihat mereka berdua menggunakan jumlah memori dan CPU yang sama. Saya tidak bisa menemukan apa pun yang menunjukkan proses mana yang berperilaku buruk.
Hal teraman adalah mencari tahu proses / pid mana yang menulis ke STDOUT.
Apakah ada cara untuk melakukan itu?
/dev/null
). Apakah Anda yakin maksud Anda bukan file tertentu (seperti perangkat terminal, atau file log ...)?Jawaban:
Di Linux, dengan asumsi Anda ingin tahu apa yang menulis ke sumber yang sama dengan stdout shell Anda terhubung, Anda bisa melakukannya:
Itu akan melaporkan
write()
panggilan sistem (pada deskriptor file apa saja) dari setiap proses yang memiliki setidaknya satu deskriptor file terbuka pada file yang sama dengan fd 1 dari shell Anda.sumber
Anda dapat menghentikan kedua pemrosesan dengan mengirimkannya SIGSTOP (ganti pid1 dan pid2 dengan PID yang sebenarnya atau gunakan
killall
dan nama aplikasi):Pencetakan pada terminal (atau ke mana pun stdout diarahkan) harus berhenti. Kemudian lanjutkan salah satu dari mereka menggunakan
Jika pesan kesalahan muncul segera, Anda tahu itu proses pertama. Jika tidak, Anda dapat menghentikannya lagi dan melanjutkan yang kedua ...
Sebelum membunuh proses yang terhenti, adalah praktik yang baik untuk mengirim SIGCONT terlebih dahulu.
Teknik yang sama dapat digunakan dengan
Ctrl-Z
dan kontrol shell pekerjaan (fg %1
,bg %1
,kill %1
, ...).sumber