Сценарий оболочки, чтобы убить процесс - PullRequest
2 голосов
/ 01 декабря 2011

Мне нужно реализовать скрипт оболочки, который убивает процесс. Проблема в том, что мне нужно сделать условие, чтобы увидеть, запущен процесс или нет.

Это мой код, но он не работает:

#!/bin/sh

if [ -x  "MY_PROCCESS_NAME"]; then
    killall MY_PROCCESS_NAME
else
    echo "Doesn't exist"
fi

Это ошибка:

line 3: [: missing `]'

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

чтобы проверить, запущен ли процесс на Mac OS X, вы можете использовать:

pid=$(ps -fe | grep 'process name' | grep -v grep | awk '{print $2}')

если вы хотите уменьшить количество сценариев оболочки, вы можете заключить один из символов имени процесса в квадратные скобки:

pid=$(ps -fe | grep '[p]rocess name' | awk '{print $2}')

в вашем тесте это будет выглядеть так:

pid=$(ps -fe | grep '[p]rocess name' | awk '{print $2}')
if [[ -n $pid ]]; then
    kill $pid
else
    echo "Does not exist"
fi

это немного сложнее, чем вам нужно было бы делать в linux, поскольку у вас обычно есть команда 'pgrep', которая является грубым эквивалентом 'ps -fe | grep ... | grep -v grep '

0 голосов
/ 01 декабря 2011

не уверен, что он будет работать в OSX, он работает в Ubuntu.

но как один вкладыш:

ps aux | awk '$11~/vim/ {PID = $2} END {if (PID) print "kill -9 "PID; else print "echo no process"}' | bash

что он делает, так это находит процесс, в данном случае vim и возвращает kill -9 pid, если строка не найдена, он возвращает echo no process, а затем передает результат в bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...