Какую операционную систему вы используете? Я понял из вашего тега C #, что это windows?
Если это так, проверьте WMI, особенно класс Win32_Process. Вот ссылка на MSDN: http://msdn.microsoft.com/en-us/library/aa394372 (VS.85) .aspx
, а также пара сценариев использования здесь (например, получение списка процессов): http://msdn.microsoft.com/en-us/library/aa394599 (VS.85) .aspx
It seems to me that the easiest way to do this and sidestep the multithreading problems would be to set a kill flag from the main thread, and check for it in the script-running thread just before the communication, killing the script when the flag is True
.
Похоже, вы можете стать жертвой супергрубого параллелизма Python. Измените ваш сценарий на этот:
#!/bin/bash
echo "sleeping five"
sleep 5
echo "sleeping five again"
sleep 5
echo "slept five"
И тогда результат будет следующим:
process: sleeping five
real 0m5.134s
user 0m0.000s
sys 0m0.010s
Если бы весь сценарий был запущен, время было бы 10 секунд. Таким образом, похоже, что поток управления python фактически не запускается до тех пор, пока сценарий bash не засыпает. Точно так же, если вы измените свой сценарий на этот:
#!/bin/bash
echo "sleeping five"
sleep 1
sleep 1
sleep 1
sleep 1
sleep 1
echo "slept five"
Тогда вывод станет:
process: sleeping five
real 0m1.150s
user 0m0.010s
sys 0m0.020s
Короче говоря, ваш код работает как логически реализованный. :)