1

Я пытаюсь написать функцию в .bash_profile, чтобы определить функцию для уничтожения процесса следующим образом:

function pkill {
                pid = ps -elf|grep python|grep $1|awk -F " " '{print $4}'
                kill -9 pid
}

И я хочу использовать "ключевое слово pkill", чтобы завершить процесс, который pid = [ps -elf | grep python | grep keyword | awk -F "" '{print $ 4}'], и мой код не работал ,Как мне написать эту функцию?

об убийстве:
мой процесс Python является многопоточным.Я пытался kill pid , kill -TERM pid или kill -INT pid , но все еще могу найти его в списке процессов .Поэтому я использовал «убить -9».

3 ответа3

3
pid=$(ps -elf|grep vim|grep 'screenrc' | awk -F" " '{print $4}')

Но вы могли бы вместо этого использовать pgrep :

pid=$(pgrep -f "python .*$1")

или же

pids=$(pgrep -d' ' -f "python .*$1")
kill -9 $pids

Если вы чувствуете себя уверенно (безрассудно!)

\pkill -9 -f "python .*$1"
2

Есть ли причина, по которой вы перечисляете, а затем отбрасываете тонну лишнего мусора?

(Я предполагаю, что вы используете GNU PS, но я предпочитаю синтаксис BSD PS. Он также поддерживается GNU PS, потому что GNU PS поддерживает все.)

 # as others have noted 'pkill' is an existing command, so let's not clash with its name
 function pypkill {
      pids=$(ps ax -opid= -ocomm= | grep python | grep "$1" | awk -F " " '{print $1}')
      kill -TERM $pids
 }

Сломать:

  • ИДП =
    • Подоболочка может возвращать более одного PID. Это захватывает их всех
  • $()
    • подоболочка Команды внутри круглых скобок будут выполнены, и их выходные данные вернутся на место.
  • пс топор
    • показывает все процессы в системе (синтаксис BSD)
  • -opid = -ocomm =
    • говорит ps вывести два столбца: PID и имя команды, а также пропустить строку заголовка
  • kill -TERM $ pids
    • Использование kill -9 - последнее средство. В большинстве случаев kill -TERM - это то, что вам нужно, или, возможно, kill -INT, прежде чем прибегнуть к kill -KILL.
0

Разве это не должно быть больше похоже на

  pid=$(ps -elf|grep python|grep $1|awk -F" " '{print $4}')
  kill -9 $pid

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .