Подтвердить что ты не робот

Shell script для захвата идентификатора процесса и его уничтожения, если существует

Я пробовал этот код и не работал

#!/bin/sh

#Find the Process ID for syncapp running instance

PID=`ps -ef | grep syncapp 'awk {print $2}'`

if [[ -z "$PID" ]] then
Kill -9 PID
fi

Показывает ошибку около awk.

Любые предложения, пожалуйста.

4b9b3361

Ответ 1

На самом деле самый простой способ сделать это - передать аргументы kill, как показано ниже:

ps -ef | grep your_process_name | grep -v grep | awk '{print $2}' | xargs kill

Надеюсь, что это поможет.

Ответ 2

Это хорошо для меня.

PID=`ps -eaf | grep syncapp | grep -v grep | awk '{print $2}'`
if [[ "" !=  "$PID" ]]; then
  echo "killing $PID"
  kill -9 $PID
fi

Ответ 3

Возможно, вам захотелось написать

`ps -ef | grep syncapp | awk '{print $2}'`

но я буду одобрять ответ @PaulR - killall -9 syncapp - гораздо лучшая альтернатива.

Ответ 4

Я использую команду pkill для этого:

NAME
       pgrep, pkill - look up or signal processes based on name and 
       other attributes

SYNOPSIS
       pgrep [options] pattern
       pkill [options] pattern

DESCRIPTION
       pgrep looks through the currently running processes and lists 
       the process IDs which match the selection criteria to stdout.
       All the criteria have to match.  For example,

              $ pgrep -u root sshd

       will only list the processes called sshd AND owned by root.
       On the other hand,

              $ pgrep -u root,daemon

       will list the processes owned by root OR daemon.

       pkill will send the specified signal (by default SIGTERM) 
       to each process instead of listing them on stdout.

Если ваш код работает через интерпретатор (java, python,...), то имя процесса - это имя интерпретатора. Вам нужно указать аргумент пользователя --full. Это соответствует имени команды и аргументам.

Ответ 5

Многие системы * NIX также имеют либо или оба pkill (1) и killall (1), который позволяет убивать процессы по имени. Используя их, вы можете избежать всей проблемы синтаксического анализа ps.

Ответ 6

PID=`ps -ef | grep syncapp 'awk {print $2}'`

if [[ -z "$PID" ]] then
**Kill -9 $PID**
fi

Ответ 7

Пришел куда-то..подумал, что это просто и полезно

Вы можете использовать команду непосредственно в crontab,

* * * * * ps -lf | grep "user" |  perl -ane '($h,$m,$s) = split /:/,$F
+[13]; kill 9, $F[3] if ($h > 1);'

или, мы можем записать его как shell script,

#!/bin/sh
# longprockill.sh
ps -lf | grep "user" |  perl -ane '($h,$m,$s) = split /:/,$F[13]; kill
+ 9, $F[3] if ($h > 1);'

И назовите это crontab так,

* * * * * longprockill.sh

Ответ 8

#!/bin/sh

#Find the Process ID for syncapp running instance

PID=`ps -ef | grep syncapp 'awk {print $2}'`

if [[ -z "$PID" ]] then
--->    Kill -9 PID
fi

Не уверен, что это помогает, но "kill" неправильно написано. Он капитализирован.

Попробуйте "убить".

Ответ 9

Это должно убить все процессы, соответствующие grep, которые вам разрешено убить.

-9 означает "Убить все процессы, которые вы можете убить".

kill -9 $(ps -ef | grep [s]yncapp | awk '{print $2}')

Ответ 10

Kill -9 PID

должен быть

kill -9 $PID

увидеть разницу?

Ответ 11

Попробуйте выполнить script:

#!/bin/bash
pgrep $1 2>&1 > /dev/null
if [ $? -eq 0 ]
then
{
    echo " "$1" PROCESS RUNNING "
    ps -ef | grep $1 | grep -v grep | awk '{print $2}'| xargs kill -9
}
else
{
    echo "  NO $1 PROCESS RUNNING"
};fi