ฉันมักจะใช้bash
เชลล์สคริปต์เพื่อรันคำสั่งง่าย ๆ สำหรับไฟล์ที่แตกต่างกัน ตัวอย่างเช่นสมมติว่าฉันมีดังต่อไปนี้bash
เชลล์สคริปต์เรียกscript.sh
ว่ารันโปรแกรม / คำสั่งfoo
สามไฟล์ข้อความ"a.txt"
, "b.txt"
, "c.txt"
:
#!/bin/bash
for strname in "a" "b" "c"
do
foo $strname".txt"
done
นอกจากนี้สมมติว่าfoo $strname".txt"
ช้าดังนั้นการเรียกใช้สคริปต์จะใช้เวลานาน (ตัวอย่างเช่นชั่วโมงหรือวัน) ด้วยเหตุนี้ฉันต้องการใช้nohup
เพื่อให้การดำเนินการต่อไปแม้ว่าเทอร์มินัลจะปิดหรือตัดการเชื่อมต่อ ฉันต้องการให้สคริปต์ไปที่พื้นหลังทันทีดังนั้นฉันจะใช้&
โอเปอเรเตอร์ ดังนั้นฉันจะใช้คำสั่งต่อไปนี้เพื่อโทรscript.sh
:
nohup bash script.sh &
วิธีนี้ใช้งานได้ดีสำหรับการเรียกใช้สคริปต์ในพื้นหลังและไม่มีการแฮงค์ แต่ตอนนี้สมมติว่าฉันต้องการยุติการประมวลผลในบางจุดด้วยเหตุผลบางอย่าง ฉันจะทำสิ่งนี้ได้อย่างไร
ปัญหาที่ฉันได้พบก็คือว่าโดยดูที่top
ผมเห็นเพียงที่สอดคล้องกับfoo
"a.txt"
ฉันสามารถยุติการfoo
โทรนั้นได้ แต่จากนั้นการโทรที่foo
สอดคล้องกันจะ"b.txt"
ได้รับการเรียกและจากนั้นฉันต้องยุติการโทรนั้นเช่นกันและต่อไปเรื่อย ๆ สำหรับไฟล์ข้อความหลายสิบหรือร้อยไฟล์ที่ระบุในfor
ลูปมันจะกลายเป็นความเจ็บปวดที่จะยกเลิกทุก ๆไฟล์ทีละไฟล์foo
! ดังนั้นฉันต้องยกเลิกเชลล์สคริปเองแทนการโทรเฉพาะที่ออกจากเชลล์สคริป
เมื่อฉันพิมพ์คำสั่ง
ps -u myusername
myusername
ชื่อผู้ใช้ของฉันอยู่ที่ไหนฉันได้รับรายการกระบวนการที่ฉันใช้อยู่ bash
แต่ผมเห็นสองรหัสกระบวนการที่แตกต่างกันเรียกว่า ฉันจะรู้ได้อย่างไรว่ากระบวนการเหล่านี้ถ้ามีการสอดคล้องกับการเรียกร้องเดิมของฉันnohup bash script.sh &
?
for s in a b c; do foo "$s".txt; done
nohup
นานไปเมื่อคุณเปิดรายการกระบวนการเพื่อดูงานที่คุณเริ่ม คุณสามารถดูคอลัมน์ "ความดี" ในps
ผลลัพธ์ แต่คำตอบที่นี่มีประโยชน์มากกว่า