Я пробовал этот код и не работал
#!/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.
Любые предложения, пожалуйста.
Я пробовал этот код и не работал
#!/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.
Любые предложения, пожалуйста.
На самом деле самый простой способ сделать это - передать аргументы kill, как показано ниже:
ps -ef | grep your_process_name | grep -v grep | awk '{print $2}' | xargs kill
Надеюсь, что это поможет.
Это хорошо для меня.
PID=`ps -eaf | grep syncapp | grep -v grep | awk '{print $2}'` if [[ "" != "$PID" ]]; then echo "killing $PID" kill -9 $PID fi
Возможно, вам захотелось написать
`ps -ef | grep syncapp | awk '{print $2}'`
но я буду одобрять ответ @PaulR - killall -9 syncapp
- гораздо лучшая альтернатива.
Я использую команду 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. Это соответствует имени команды и аргументам.
Многие системы * NIX также имеют либо или оба pkill (1) и killall (1), который позволяет убивать процессы по имени. Используя их, вы можете избежать всей проблемы синтаксического анализа ps
.
PID=`ps -ef | grep syncapp 'awk {print $2}'`
if [[ -z "$PID" ]] then
**Kill -9 $PID**
fi
Пришел куда-то..подумал, что это просто и полезно
Вы можете использовать команду непосредственно в 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
#!/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" неправильно написано. Он капитализирован.
Попробуйте "убить".
Это должно убить все процессы, соответствующие grep, которые вам разрешено убить.
-9 означает "Убить все процессы, которые вы можете убить".
kill -9 $(ps -ef | grep [s]yncapp | awk '{print $2}')
Kill -9 PID
должен быть
kill -9 $PID
увидеть разницу?
Попробуйте выполнить 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