У меня есть следующая проблема, связанная с синхронизацией процессов.
Существует сценарий python startup.py, исполняемый файл maestro и исполняемый файл tee.
Мой скрипт на python startup.py запускает программу maestro и передает stderr / stdout maestro в файл журнала, используя команду tee, а также записывает в консоль.
Я добился этого, используя следующий код:
cmd = "maestro"
mae_err_log = "output.txt"
maestro = subprocess.Popen(cmd, stderr = subprocess.STDOUT, stdout=subprocess.PIPE)
tee = subprocess.Popen(['tee', mae_err_log], stdin = maestro.stdout)
maestro.stdout.close()
tee.communicate()
maestro_status = maestro.returncode
sys.exit(maestro_status)
Моя программа maestro - это программа с графическим интерфейсом, когда я выхожу из программы maestro, она внутренне вызывает posix system ("maestro_cleanup &") api и немедленно завершает работу. Я заметил, что моя программа maestro не выпускает консоль до тех пор, пока программа maestro_cleanup не прекратит работу, хотя я запускаю maestro_cleanup в фоновом режиме. Мне нужно запустить maestro_cleanup в фоновом режиме, так как это занимает время, и я не хочу держать консоль в течение периода, пока не завершится maestro_cleanup. Используя приведенный выше код, программа maestro не завершает свою работу, пока не завершится maestro_cleanup.
Я вижу, что "ps -elf" показывает следующее:
0 S j 16876 6678 0 75 0 - 65307 wait 18:56 pts/53 00:00:00 python startup.py
0 Z j 17230 16876 4 76 0 - 0 exit 18:56 pts/53 00:00:04 [maestro] <defunct>
0 S j 17231 16876 0 77 0 - 948 pipe_w 18:56 pts/53 00:00:00 /usr/bin/tee output.txt
0 S j 17424 1 0 77 0 - 948 - 18:57 pts/53 00:00:00 maestro_cleanup
Вы можете видеть, что родительский процесс maestro_cleanup является идентификатором процесса сеанса вместо maestro, потому что я запустил maestro_cleanup с использованием системного API в фоновом режиме.
Есть идеи, почему маэстро не завершает работу до тех пор, пока не завершится maestro_cleanup?
Буду признателен за любую помощь.
-Vipin