Как дождаться завершения нескольких экземпляров одной программы в Linux?

Как мне дождаться завершения нескольких экземпляров одной и той же программы? Ниже моего сценария какие-либо предложения или указатели?

Мне нужно перезапустить работающий процесс C. После долгого поиска в Google, я понял, что перезапуск может быть выполнен только с помощью fork и exec(мне нужно, чтобы новый экземпляр имел pid, отличный от исходного, следовательно, использующий только exec не будет работать). Ниже приведена последовательность, которую я сделал.

Shell 1:
Bash script
1. Start the first instance(./test.exe lets say pid 100)
2. Wait for it complete(pid 100) <<< Here need to wait for all instances of test.exe to complete

Shell 2:
1. Send a signal to above process(pid-100)
2. In signal handler had fork(new pid 200) a new process with exec command(./test.exe --restart) and kill parent (pid 100)

Теперь мой вопрос заключается в том, как можно дождаться завершения всех экземпляров test.exe в сценарии bash в shell1?(В основном приходится ждать завершения pid 200). При моем текущем подходе сценарий bash в shell1 завершается, как только я посылаю сигнал на уничтожение pid. 100

Обновить:

На самом деле я ищу команду bash/unix, чтобы дождаться завершения всех экземпляров test.exe. Что-то вроде - 'wait $(pgrep -f test.exe)'

1 ответ

В основном вы ищете механизмы межпроцессной синхронизации, то есть семафоры между процессами и мьютексы между процессами.

На ум приходят два подхода: семафоры POSIX и старые семафоры System V. Я бы порекомендовал первое.

Также проверьте этот так ответ.

Надеюсь это поможет:)

Другие вопросы по тегам