เป็นประจำฉันลืมเพิ่ม&& shutdown -h now
กระบวนการที่ใช้เวลานาน มีวิธีการเพิ่มshutdown -h now
คำสั่งหลังจากเรียกคำสั่งแรกหรือไม่ มันไม่ได้มีวัตถุประสงค์เพื่อขัดจังหวะกระบวนการที่กำลังดำเนินอยู่ เป็นไปได้ไหมที่จะรับชม PID?
เป็นประจำฉันลืมเพิ่ม&& shutdown -h now
กระบวนการที่ใช้เวลานาน มีวิธีการเพิ่มshutdown -h now
คำสั่งหลังจากเรียกคำสั่งแรกหรือไม่ มันไม่ได้มีวัตถุประสงค์เพื่อขัดจังหวะกระบวนการที่กำลังดำเนินอยู่ เป็นไปได้ไหมที่จะรับชม PID?
คำตอบ:
ไม่จำเป็นต้องเรียกใช้ ps ซ้ำ ๆ เพื่อแสดงรายการกระบวนการทั้งหมดและ grep ผ่านเอาต์พุต พื้นหลังกระบวนการด้วย ctrl-Z จากนั้นเรียกใช้
bg %1 ; wait %1 ; shutdown -h now
หากคุณมีงานพื้นหลังอื่น ๆ ที่ทำงานอยู่คุณจะได้รับ jobspec อื่นแทน [1] เมื่อคุณ ctrl-z ถ้าเป็นเช่นนั้นใช้สิ่งนั้นแทน
คุณสามารถทำสิ่งนี้ได้ซึ่งจะตรวจสอบว่ากระบวนการทำงานทุก 5 วินาทีและดำเนินการตามความเหมาะสม:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
สังเกตเครื่องหมายวงเล็บเหลี่ยมในgrep
นิพจน์ นี่คือเพื่อให้แน่ใจว่าgrep
กระบวนการไม่ได้รับการจับคู่ถ้ามันจบลงในps
รายการ การล้อมรอบอักขระเดี่ยวใด ๆ ด้วยวงเล็บเหลี่ยมก็เพียงพอแล้ว
ฉันทำสิ่งนี้ตลอดเวลา
&&
คำสั่งของฉันfg && shutdown -h now
ไปที่:
หรือคุณสามารถสำรวจความคิดเห็นตามที่แนะนำในคำตอบอื่น ๆ เช่นนี้:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
หากคุณรู้ pid คุณสามารถเรียกใช้นี้:
while ps -p $PID; sleep 5; done; shutdown -h now
หากต้องการรันโดยไม่มีเสียงก้องจาก ps ให้ทำสิ่งนี้:
while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now
และในที่สุดก็รันมันในพื้นหลังโดยไม่มีเอาต์พุตใด ๆ :
(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &
ทางออกของสกอตต์เป็นสิ่งที่ดี แต่สิ่งนี้ไม่จำเป็นต้องเพิ่มgrep
ซ้ำไปซ้ำมาถ้าคุณรู้จัก pid อยู่แล้ว และมันก็เร็วกว่ามากในการพิมพ์ระบบ: p
สร้างเชลล์สคริปต์เพื่อรันทั้งสองกระบวนการ:
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
หลังจากบันทึกสิ่งนี้ในไดเรกทอรีที่คุณเริ่มกระบวนการที่กำหนดให้ทำ:
chmod +x MyShellScript.txt
จากนั้นเมื่อคุณต้องการเรียกใช้คำสั่งเพียงพิมพ์./MyShellScript.txt
และมันจะทำเพื่อคุณ
&&
จะทำงานเฉพาะเมื่อคำสั่งก่อนหน้านี้ประสบความสำเร็จ หากคุณต้องการให้มันรันแม้ว่าคำสั่งจะใช้ไม่;
ได้ก็ตาม