ฉันจะเริ่มกระบวนการในพื้นหลังและตรวจสอบเมื่อมันสิ้นสุดภายในสคริปต์ทุบตีได้อย่างไร ความคิดของฉันคือสคริปต์เช่นนี้:
launch backgroundprocess &
while [ Process is running ];do
echo "PROCESS IS RUNNING\r"
done;
echo "PROCESS TERMINATED"
ฉันจะเริ่มกระบวนการในพื้นหลังและตรวจสอบเมื่อมันสิ้นสุดภายในสคริปต์ทุบตีได้อย่างไร ความคิดของฉันคือสคริปต์เช่นนี้:
launch backgroundprocess &
while [ Process is running ];do
echo "PROCESS IS RUNNING\r"
done;
echo "PROCESS TERMINATED"
คำตอบ:
กุญแจสำคัญคือคำสั่ง "รอ":
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
ด้วยwait
คุณสามารถมีความละเอียดที่คุณต้องการ:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
นี่เป็นวิธีหนึ่งในการทำ:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
wait
เหมาะสมกว่าสำหรับสิ่งนั้นหรือ
คุณสามารถรันกระบวนการของคุณด้วย nohup และเขียนเชลล์สคริปต์เพื่ออ่านไฟล์ nohup.out ซึ่ง nohup ใช้ในการเข้าสู่ระบบ
nohup command &
nohup
ไม่ได้เขียนอะไรที่จะnohup.out
; มันเพียงสร้างไฟล์และเปลี่ยนเส้นทางเอาต์พุตของคำสั่งไปยังมัน (2) หากคำสั่งไม่สร้างผลลัพธ์ใด ๆ จะไม่มีการเขียนข้อมูลใด ๆnohup.out
และความคิดนี้จะไปอย่างรวดเร็ว (3) แม้ว่าcommand
จะเขียนเอาท์พุทคุณจะบอกได้อย่างไรว่ามันจะจบลงเมื่อไหร่ด้วยการมอนิเตอร์เอาต์พุตนั้น
lsof
เพื่อดูว่าnohup
ยังใช้อยู่nohup.out
หรือไม่ แต่ฉันยอมรับว่านี่เป็นวิธีที่มีขนดกมาก
command
เริ่มทำงานnohup
จะหายไป (1) ใช่ฉันกำลังทำซ้ำตัวเลขเพราะฉันทำซ้ำสิ่งที่ฉันพูดเมื่อสองปีที่แล้ว: nohup
ไม่ได้เขียนอะไรnohup.out
เลย (5) ใช่คุณสามารถเขียนเชลล์สคริปต์เพื่อวนซ้ำและรันlsof
เพื่อดูว่าnohup.out
ยังเปิดอยู่หรือไม่ แต่นั่นจะเป็นคำตอบที่แตกต่าง (6) แม้ว่าคุณจะทำเช่นนั้นมันก็จะไม่น่าเชื่อถือ เกิดอะไรขึ้นถ้ากระบวนการอื่นเปิดnohup.out
ไฟล์? คุณต้องการตรวจสอบว่ากระบวนการเฉพาะนี้nohup.out
เปิดขึ้นจริงหรือไม่ (7) แต่ถ้าคุณจะทำอย่างนั้นทำไมไม่ลองตรวจสอบดูว่ากระบวนการกำลังทำงานอยู่หรือไม่?