BASH: Прив’язання існування програми до іншої програми


1

Я хочу створити сценарій, який запускає дві програми. Ця частина проста, але є улов: я хочу вбити другу, якщо перша вийде. Як я можу це зробити?

Редагувати

Я намагався вбити програму за допомогою PID після того, як вийшов інший, але програма є hamster-time-tracker, це програма Python, яка виходить негайно, очевидно, породжуючи інший процес. Як я можу обійти це? Чи є якийсь спосіб отримати інший PID породжений?

Редагувати 2

Зрозумів це. Мені довелося бігати python /usr/bin/hamster-time-trackerзамість hamster-time-tracker, і він продовжував бігати.

Відповіді:


5
#!/bin/bash

cmd-a &
a=${!}

cmd-b &
b=${!}

wait $a
kill $b

Я використовував yes aі yes bяк команди при тестуванні цього.


1
+1 за елегантне рішення, яке легко зрозуміти
Кенні Расшаерт

3

Там же чекати команди в Баш чекати закінчення першого додатка , а потім вбити другий додаток.

Оскільки очікування вставляється автоматично після того, як команди не закінчуються &, правильний порядок може врятувати вас від проблеми з ручним очікуванням:

A &
B          # waits
kill $!    # then kills A

ви можете знайти pid породженого процесу за допомогою ps aux | grep <ім'я вашої обробки>, а потім чекайте цього.
OJ278

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