Если я запустить приложение следующим образомВ Ruby говорится, что системный процесс все еще жив?
cmd = "some_app &"
`#{cmd}`
Как я могу узнать, если процесс все еще жив? Я знаю, что есть различные способы получения pid запущенного приложения, и я мог бы проверить, был ли он по-прежнему доступен через ps -ef
. Однако это только скажет мне, был ли процесс, который существовал с одним и тем же pid, когда приложение могло быть убито ранее. Та же проблема существует с подходом ps -ef | grep some_app
.
У кого-нибудь есть идеи чистого пути для достижения этого?
Hmmmm вы имеете получил меня nking, предположительно, каждый процесс имеет родительский процесс текущего работающего рубинового интерпретатора где-то в дереве процессов. Разве это не просто работа над деревом, начинающимся с мастер-процесса рубинового переводчика? (Я предполагаю, что это то, о чем вы говорили с ptrace). – Jamie
Да, за исключением того, что процесс не может «ждать» ничего, кроме его прямых детей, нет никакого переносного способа для обработки дерева процессов, и если промежуточный ребенок выходит из него, все, что ниже этой точки, получает «репарацию» для обработки 1 («init»)), поэтому, даже если вы * можете * ходить по дереву процессов, вы не обязательно сможете найти всех своих потомков. – zwol