Saya sering menggunakan bashskrip shell untuk menjalankan perintah sederhana untuk banyak file berbeda. Misalnya, bahwa saya memiliki berikut bashshell script, yang disebut script.sh, yang menjalankan program / perintah foopada tiga file teks "a.txt", "b.txt", "c.txt":
#!/bin/bash
for strname in "a" "b" "c"
do
foo $strname".txt"
done
Juga, anggap itu foo $strname".txt"lambat, sehingga pelaksanaan skrip akan memakan waktu lama (jam atau hari, misalnya). Karena itu, saya ingin menggunakan nohupsehingga eksekusi terus berlanjut bahkan jika terminal ditutup atau terputus. Saya juga ingin skrip untuk segera pergi ke latar belakang, jadi saya akan menggunakan &operator. Jadi saya akan menggunakan perintah berikut untuk memanggil script.sh:
nohup bash script.sh &
Ini berfungsi dengan baik untuk menjalankan skrip di latar belakang dan tanpa hangup, tapi sekarang anggaplah saya ingin mengakhiri eksekusi di beberapa titik karena beberapa alasan. Bagaimana saya bisa melakukan ini?
Masalah yang saya temui adalah, dengan melihat top, saya hanya melihat yang foosesuai "a.txt". Saya dapat mengakhiri foopanggilan itu, tetapi kemudian fookorespondensi "b.txt"dipanggil dan kemudian saya harus mengakhiri panggilan itu , dan seterusnya. Untuk puluhan atau ratusan file teks yang ditentukan dalam forloop, menjadi susah untuk menghentikan setiap foo, satu per satu! Jadi entah bagaimana saya harus menghentikan skrip shell itu sendiri , bukan panggilan khusus yang dikeluarkan dari skrip shell.
Saat saya mengetik perintah
ps -u myusername
di mana myusernamenama pengguna saya, saya mendapatkan daftar proses yang saya jalankan. Tapi saya melihat dua ID proses yang berbeda disebut bash. Bagaimana saya tahu yang mana dari proses ini, jika ada, yang sesuai dengan panggilan asli saya nohup bash script.sh &?
for s in a b c; do foo "$s".txt; done
nohupakan lama hilang pada saat Anda membuka daftar proses untuk melihat pekerjaan yang Anda mulai. Anda dapat melihat kolom "kesenangan" di psoutput tetapi jawaban di sini lebih bermanfaat.