kill -9 + отключить сообщения (стандартный вывод) из команды kill - PullRequest
3 голосов
/ 18 июня 2010

Я написал следующий скрипт, который включает таймаут в 20 секунд, если grep не может найти соответствующую строку в файле.

Скрипт работает хорошо, но вывод скрипта выглядит так:

./test: line 11: 30039: Killed
  1. как отключить это сообщение из команды kill?

  2. как заставить команду kill игнорировать, если процесс не существует?

THX
Яэль

#!/bin/ksh  
( sleep 20 ; [[ ! -z ` ps -ef | grep "qsRw -m1" | awk '{print $2}' ` ]] && kill -9  2>/dev/null ` ps -ef | grep "qsRw -m1" | awk '{print $2}' `   ; sleep 1 ) &
RESULT=$! 
print "the proccess:"$RESULT
grep -qsRw -m1 "monitohhhhhhhr" /var
if [[ $? -ne 0 ]]
then
print "kill "$RESULT
  kill -9 $RESULT
fi
print "ENDED"


./test

the proccess:30038
./test: line 11: 30039: Killed
kill 3003

Ответы [ 4 ]

3 голосов
/ 18 июня 2010

kill -9 $RESULT &> /dev/null

Это отправит stdout и stderr в /dev/null.

2 голосов
/ 18 июня 2010

Сообщения печатаются вашей оболочкой, а не уничтоженным процессом.

Попробуйте запустить процесс для уничтожения в другой оболочке, инкапсулируя команду уничтожения следующим образом:

sh -c 'command_to_be_inettrupted&'

Идея состоит в том, чтобы заставить экземпляр оболочки завершиться раньше, чем процесс, который он запустил. Вам также может потребоваться выполнить команду nohup, но в моей системе это было ненужным.

Например:

sh -c 'sleep 10&' ; sleep 1; killall sleep

Этот код не будет выдавать никаких результатов, несмотря на уничтожение первого экземпляра сна.

2 голосов
/ 18 июня 2010

вам лучше взглянуть на timeout команду

man timeout

NAME
       timeout - run a command with a time limit

SYNOPSIS
       timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
       timeout [OPTION]

DESCRIPTION
       Start  COMMAND,  and  kill  it if still running after NUMBER seconds.  SUFFIX may be `s' for
       seconds (the default), `m' for minutes, `h' for hours or `d' for days.
0 голосов
/ 18 июня 2010

Я думаю, что это сообщение исходит от контроля работы. Попробуйте выключить его с помощью set + m
если это не работает в ksh, попробуйте скрипт с #! / bin / bash

...