Я хочу запустить новый экземпляр моего скрипта python, когда он достигнет указанного времени в течение часа и убьет текущий экземпляр. Сценарий python запускается автоматически при загрузке с помощью crontab. Бесконечный цикл while считывает данные. Если есть данные, входящие между минутой 59 секунд 30 и минутой 59 секунд 59, файл закрывается, и я хочу, чтобы скрипт начал новый экземпляр себя с новым идентификатором процесса и убил старый процесс. На данный момент я делаю это с помощьюскрипт python, чтобы убить и начать сам
subprocess.call(['python', '/home/pi/script.py'])
sys.exit(1)
Это запускает новый экземпляр сценария питона, но старая еще видим и (кажется) активны, когда я проверяю процессы с top
.
Есть ли лучший способ запустить программу и убить себя внутри скрипта python?
Другой подход с использованием Баш скрипт с помощью сценария Python:
#!/bin/sh
PID=`ps -eaf | grep python | grep -v grep | awk '{print $2}'`
if [[ "" != "$PID" ]]; then
echo "killing $PID"
kill -9 $PID
sleep 1
sudo python /home/pi/readserial_V4_RP.py &
exit 1
fi
Но это не может работать, так как конечный сценарий питона, до того, как скрипт Баш может убить его. Я могу запустить скрипт python, не убивая python
процессов, но как я могу быть уверен, что скрипт python не запущен, прежде чем я запустил новый экземпляр скрипта python.
, потому что у меня есть чувство, когда у меня есть более чем один же питон сценарии, работающие, что первый один, который был начат делает все «работать», а остальные только в режиме ожидания ...
Thx! Я тоже пробовал его с помощью 'shell = True', но с тем же результатом. Я думаю, stdout дает мне журнал, где я могу видеть ошибки, если они есть? Или что он делает? – BallerNacken
Связь() не возвращается, пока процесс не завершится. Если вы хотите контролировать процесс, используйте poll() и периодически проверяйте содержимое вывода. Когда пришло время убить процесс, внешний скрипт может использовать kill(). – Neil
@Henin RK Ваш подход не работает. Текущий процесс завершается, но сценарий не запускается снова. Правильно ли, что так, как я это делаю в настоящий момент, старый экземпляр скрипта python является родительским процессом, и ребенок может быть убит только в том случае, если заканчивается родительский элемент? Я отредактировал сценарий bash в моем вопросе с другим подходом и проблемой. – BallerNacken