ช่วยในการรอในขณะที่กระบวนการกำลังทำงานอยู่


1

ฉันกำลังมองหาสคริปต์ทุบตีที่ตรวจสอบว่ากระบวนการติดตั้งกำลังทำงานอยู่และรอ / หยุดชั่วคราวหากกระบวนการนั้นดำเนินการต่อเมื่อกระบวนการไม่ทำงานอีกต่อไป

นี่คือสิ่งที่ฉันมี:

 #!/bin/bash
 PROCESS="Installer";
 PID=$(ps -A |grep -m1 "$PROCESS" | awk '{print $1}');
 while s=`ps -p $PID -o s=` && [[ "$s" && "$s" !='Z'  ]]; do
     echo "$PROCESS is Running, waiting for it to close"
     sleep 1
 done
 echo "$PROCESS is not Running";
 SCRIPT HERE

2
เราไม่ใช่บริการการเขียนสคริปต์ คุณลองทำอะไรไปแล้ว?
nohillside

ขอบคุณ มันไม่ทำงานตามที่คาดไว้?
nohillside

เช่นเดียวกับคำถามอื่น ๆ ของคุณคุณต้องแน่ใจว่าคุณค้นหาสตริงที่ถูกต้อง ที่นี่คุณกำลังค้นหา "ตัวติดตั้ง" ซึ่งหมายถึงกระบวนการใด ๆ ที่มีสตริงนั้นจะตรงกัน (เช่น "ตัวติดตั้งความคืบหน้า" ฉันจะปรับค่านี้เป็น "ตัวติดตั้งแอพ"
Scot

1
และเพื่อหลีกเลี่ยงการพึ่งพากระบวนการแสดงก่อนที่grepฉันจะใช้pgrepแทน (ซึ่งแม้จะส่งคืน PID โดยตรง)
nohillside

คำตอบ:


1

ฉันเอาสคริปต์ของคุณและเปลี่ยน

  • เปลี่ยนการมอบหมาย PID เป็น pgrep
  • เปลี่ยน-o s=เป็น-o stat=สำหรับps
  • นำสิ่งที่ไม่จำเป็น;ออกตอนท้ายของบางบรรทัด

มันค่อนข้างยากที่จะทดสอบ แต่บางอย่างเช่น

#!/bin/bash
PROCESS="Installer"
PID=$(pgrep "$PROCESS")
while s=`ps -p $PID -o stat=` && [[ "$s" && "$s" != 'Z' ]]; do
    echo "$PROCESS is running, waiting for it to terminate"
    sleep 1
done
echo "$PROCESS is not running anymore"
SCRIPT HERE

ควรทำงาน.

หากคุณไม่กังวลเกี่ยวกับตัวติดตั้งที่จะเข้าสู่สถานะZ ombie คุณสามารถพึ่งพาข้อเท็จจริงที่psออกด้วย 1 หากไม่พบกระบวนการและทำให้สภาพลูปง่ายขึ้นอย่างมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.