Вы можете использовать !
, чтобы получить PID последней команды.
Я хотел бы предложить что-то похожее на следующее, что также проверить, если процесс, который вы хотите запустить уже работает:
#!/bin/bash
if [[ ! -e /tmp/test.py.pid ]]; then # Check if the file already exists
python test.py & #+and if so do not run another process.
echo $! > /tmp/test.py.pid
else
echo -n "ERROR: The process is already running with pid "
cat /tmp/test.py.pid
echo
fi
Затем, когда вы хотите, чтобы убить его:
#!/bin/bash
if [[ -e /tmp/test.py.pid ]]; then # If the file do not exists, then the
kill `cat /tmp/test.py.pid` #+the process is not running. Useless
rm /tmp/test.py.pid #+trying to kill it.
else
echo "test.py is not running"
fi
Конечно, если убийство должно произойти некоторое время после запуска команды, вы можете поместить все в один и тот же сценарий:
#!/bin/bash
python test.py & # This does not check if the command
echo $! > /tmp/test.py.pid #+has already been executed. But,
#+would have problems if more than 1
sleep(<number_of_seconds_to_wait>) #+have been started since the pid file would.
#+be overwritten.
if [[ -e /tmp/test.py.pid ]]; then
kill `cat /tmp/test.py.pid`
else
echo "test.py is not running"
fi
Если вы хотите иметь возможность запускать еще одну команду с тем же именем одновременно и иметь возможность их выборочно убивать, требуется небольшое редактирование сценария. Скажите, я постараюсь вам помочь!
С чем-то подобным вы уверены, что убиваете то, что хотите убить. Такие команды, как pkill
или grepping ps aux
, могут быть рискованными.
Вы нашли ключевое слово «test.py» в информации о процессе «ps»? – staticor