Ambil informasi proses dari perintah nohup

3

saya menggunakan nohup perintah untuk menjalankan skrip shell sebagai berikut:

nohup ./run.sh &

Pertanyaan saya adalah: Setelah keluar terminal dan kembali lagi nanti, bagaimana saya bisa mengambil informasi tentang proses ini jika sudah selesai atau masih berjalan?

Alli
sumber

Jawaban:

1

Secara umum Anda dapat memeriksa output dari ps x. Entah ada run.sh disana atau tidak. Jika ada, mungkin proses yang Anda cari atau yang lain run.sh. Investigasi lebih lanjut mungkin diperlukan.

Namun ada trik ini. Catatan nohup mencetak pesan seperti ini:

 nohup: ignoring input and appending output to /home/alli/nohup.out

Sekarang aktifkan:

lsof /home/alli/nohup.out

Jika Anda run.sh dipanggil dengan nohup masih berjalan, seharusnya muncul di output dari lsof (dua kali, karena nohup mengarahkan kembali deskriptor file 1 dan 2 untuk nohup.out ). Jika Anda menggunakan nohup lebih dari sekali, lsof harus mengembalikan beberapa proses. Jika Anda menggunakan nohup lebih dari sekali dengan executable yang sama, Anda mungkin perlu memeriksa /proc/$pid/ ( contoh ) untuk membedakan mereka.

Saya akan menggunakan tmux di tempat pertama. Bahkan saya menggunakannya setiap hari.

Kamil Maciorowski
sumber
1

Anda dapat menyimpan nilai nohup proses ped dalam file menggunakan $! tepat setelah Anda memulai proses dengan

nohup the_process &

Kemudian ketika Anda kembali, baca PID dan periksa apakah prosesnya berjalan. Jika ya, periksa apakah itu jenis proses yang Anda inginkan. (PID mungkin telah dipindahkan ke proses lain.)

Jika tidak mengganggu fungsi proses, Anda juga dapat melewati proses argumen palsu yang akan bertindak sebagai petunjuk untuk Anda ketika Anda membaca output dari ps. Misalnya.:

$ cat p.bash 
#!/bin/bash
sleep 10
$ nohup ./p.bash some_id_hint &
[1] 14139
nohup: ignoring input and appending output to 'nohup.out'
$ echo $!
14139
$ ps 14139
  PID TTY      STAT   TIME COMMAND
14139 pts/1    S      0:00 /bin/bash ./p.bash some_id_hint
Tomasz
sumber