У вас есть два способа:
Давайте начнем с поиска конкретного приложения на моем ноутбуке:
[root@pinky:~]# ps fax | grep mozilla
3358 ? S 0:00 \_ /bin/sh /usr/lib/firefox-3.5/run-mozilla.sh /usr/lib/firefox-3.5/firefox
16198 pts/2 S+ 0:00 \_ grep mozilla
Все примеры теперь будут искать PID 3358.
Первый способ : Запустите «ps aux» и grep для PID во втором столбце. В этом примере я ищу firefox, а затем его PID:
[root@pinky:~]# ps aux | awk '{print $2 }' | grep 3358
3358
Итак, ваш код будет:
if [ ps aux | awk '{print $2 }' | grep -q $PID 2> /dev/null ]; then
kill $PID
fi
Второй способ : Просто найдите что-то в каталоге /proc/$PID
. Я использую «exe» в этом примере, но вы можете использовать что-нибудь еще.
[root@pinky:~]# ls -l /proc/3358/exe
lrwxrwxrwx. 1 elcuco elcuco 0 2010-06-15 12:33 /proc/3358/exe -> /bin/bash
Итак, ваш код будет:
if [ -f /proc/$PID/exe ]; then
kill $PID
fi
Кстати: что не так с kill -9 $PID || true
?
EDIT:
Подумав об этом в течение нескольких месяцев ... (около 24 ...), оригинальная идея, которую я привел здесь, - хороший хак, но крайне непереносимый Хотя он учит некоторые детали реализации Linux, он не сможет работать на Mac, Solaris или * BSD. Это может даже не сработать в будущих ядрах Linux. Пожалуйста, используйте "ps", как описано в других ответах.