Не так просто.
В mac команда open
выскочит из системы, чтобы найти приложение для запуска вашего файла, а это означает, что она выполнит fork-exec другого исполняемого файла в качестве нового процесса. Как только это будет сделано, команда open
прекратит работу, оставив другой процесс запущенным (в фоновом режиме, как потерянный процесс).
Таким образом, используя контекст subprocess
, вы увидите идентификатор процесса open
, но не идентификатор процесса дочернего процесса, запущенного open
. Кроме того, рассмотрим случай, когда open
запускает каталог, который на Mac будет открываться как новое окно в Finder. Тогда у вас нет нового идентификатора процесса! Аналогично для других файлов, если приложение было вызвано уже запущенным до того, как вы вызвали open
, и вместо этого оно предпочитает открывать новый файл на новых вкладках существующего процесса.
В вашей ситуации, если вы хотите лучшего контроля, возможно, вам нужно найти правильное приложение для открытия вашего файла и запустить его напрямую, а не полагаться на open
.
Редактировать
Это справочная страница из открытых. Вы можете использовать некоторые переключатели, чтобы запускать процесс до завершения дочернего процесса и так далее. Но, тем не менее, я не уверен, что вы можете убить дочерние процессы, убив open (зависит от того, удастся это или нет, зависит от множества факторов). Возможно, вам нужно выяснить идентификаторы процессов дочерних процессов и уничтожить их напрямую.