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


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.