Допомога в очікуванні виконання процесу


1

Я шукаю скрипт bash, який перевіряє, чи запущений процес інсталятора, і чекає / призупиняє, якщо він потім продовжує працювати, коли процес більше не виконується.

Ось що я досі маю:

 #!/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 Зомбі держава можна покластися на те, що ps виходить з 1, якщо не знайдено жодного процесу, і значно спрощує стан петлі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.