Это не сработает:
if [ $compteur >0 ]
в оболочке Bourne (#!/bin/sh
) должно быть:
if [ $compteur -gt 0 ]
или в Bash (#!/bin/bash
)может быть предыдущим или:
if [[ $compteur -gt 0 ]]
или
if (( compteur > 0 ))
То есть, если вы проводите числовое сравнение.Ваша команда ps
ненадежна, так как начальные пробелы в PID сбрасывают ее, и вы получите ложные срабатывания по крайней мере по нескольким причинам.Кроме того, по крайней мере в моей системе ps -u username
выводит PID в первом столбце.
Вы должны использовать pgrep
и pkill
.
Чтобы ответить на свой основной вопрос, измените свойwhile :
(навсегда) до:
while pkill -0 $PID
Таким образом, ваш сценарий будет выглядеть примерно так:
#!/bin/sh
echo "Enter the name of the process to monitor "
read nom
compteur=`pgrep -U $USER "$nom"`
while pkill -0 $compteur 2>/dev/null
do
sleep 10
kill $compteur && echo " Process terminated "
done
Однако другая проблема состоит в том, что делать, если существует более одного такого процесса.
См. Управление процессами для получения дополнительной информации.