Misalkan saya menjalankan perintah dalam satu sesi shell, misalnya bash -c 'apt-get update && apt-get upgrade'
. 5 menit kemudian saya memutuskan untuk pergi keluar untuk camilan, dan menyadari bahwa saya lupa menambahkan beberapa bentuk mekanisme pemberitahuan apakah keluar itu berhasil atau gagal.
Nah, apa yang harus saya lakukan sekarang? Kalau saja saya bisa menanyakan dari terminal lain status keluar dari perintah lain itu (atau secara khusus, PID itu), mungkin saya bisa setelah semua menampilkan semacam pop up. Jadi pertanyaannya adalah: bagaimana saya bisa menanyakan status keluar dari proses yang sudah berjalan dari terminal lain?
Dengan kata lain,
DIBERIKAN bahwa saya memiliki proses yang berjalan di terminal A DAN PID-nya diketahui
KAPAN saya menjalankan beberapa perintah di terminal B
MAKA saya harus bisa tahu apakah proses di terminal A selesai dengan status keluar 0 atau status keluar> 1.
sumber
wait
untuk mendapatkan kode proses latar belakang di shell Anda saat ini, setelah itu berakhir, tapi saya tidak bisa menemukan apa pun yang memungkinkan untuk meminta shell lain. Cukup memantau apakah suatu proses masih berjalan dan meningkatkan peringatan setelah keluar juga sepele lagi, tetapi tidak mengetahui kode keluarnya. Satu-satunya cara saya mungkin memikirkan akan memerlukan mempersiapkan shell AndaPROMPT_COMMAND
untuk menyimpan kode keluar terakhir di tempfile atau lokasi yang dapat diakses serupa. Apakah itu pilihan?Jawaban:
Gunakan
strace
sebagai berikut:Tidak ada panggilan sistem atau sinyal yang menarik di sini, jadi kami katakan
strace
untuk mengabaikannya dengan-e
ekspresi dan menekan pesan status-q
.strace
menempel pada proses dengan PID$PID
, menunggu sampai keluar secara normal dan mengeluarkan status keluarnya seperti ini:if
Ekspresi sederhana untuk memanggil semua jenis notifikasi dapat berupa:Contoh dijalankan
Sebagian besar kredit diberikan untuk jawaban ini pada U&L , silakan tinggalkan upvote di sana jika Anda merasa ini berguna.
sumber