ps -p $pid
POSIX и должен работать над любым современным невстроенным Unix (не старинные вещи или Minix или BusyBox).
Простой и портативный способ протестировать, существует ли процесс данным PID, kill -0 $pid
. Это только работает, если можно отправить сигнал в процесс (сигнал 0 ведет себя как сигнал, который всегда поставляется, но не имеет никакого эффекта), означая это kill
работает под эффективным UID процесса или как корень. Если kill
работает как другой пользователь, можно протестировать, не сигнализирует ли это “о таком процессе” (ESRCH) или “операции, не разрешенной” (EPERM), но от оболочки это требует знания, как реализация отформатирует сообщение об ошибке.
Ваш предложенный дизайн имеет главный дефект: как Вы знаете ли, что PID является процессом bunzip, которого Вы ожидали? Возможно, bunzip закончился и существует теперь другой процесс с его старым PID. Единственное место, где можно надежно ожидать после завершения процесса, находится в его родителе.
Лучший подход должен был бы включить существование несжатого файла и или несуществование сжатого файла, или проверять, что несжатый файл не открыт никаким процессом (с lsof
).
Я предполагаю, что у Вас есть сети 10.0.0.0/8
один переключатель и 192.168.0.0/24
на другом простое решение проблемы было бы помещено следующее в /etc/hosts
файл или независимо от того, что Вы используете для name resolution
.
192.168.0.10 machine1-100
192.168.0.11 machine2-100
10.0.1.10 machine1
10.0.1.11 machine2
Пока у Вас есть присутствие в той же сети как другая машина, система автоматически направит трафик в том интерфейсе, если Вы не добавите определенные маршруты, переопределяющие это поведение.