kill -9 +从kill命令禁用消息(标准输出)

时间:2010-06-18 10:49:21

标签: linux ksh

我编写了以下脚本,如果grep在文件中找不到相关字符串,则会启用超时20秒。

该脚本运行良好,但脚本的输出如下:

./test: line 11: 30039: Killed
  1. 如何从kill命令禁用此消息?

  2. 如果进程不存在,如何告诉kill命令忽略?

  3. 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
    

5 个答案:

答案 0 :(得分:3)

kill -9 $RESULT &> /dev/null

这会将stdoutstderr发送到/ dev / null。

答案 1 :(得分:2)

你最好看看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.

答案 2 :(得分:2)

邮件由您的shell打印,而不是由被杀死的进程打印。

尝试运行proccess将在另一个shell中被杀死,封装命令被杀死如下:

sh -c 'command_to_be_inettrupted&'

这个想法是让shell实例比它启动的进程更早退出。您可能还需要“nohup”您的命令,但这在我的系统上是不必要的。

例如:

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

尽管第一个睡眠实例被杀死,但此代码不会产生任何输出。

答案 3 :(得分:0)

我认为这条消息来自工作控制。尝试使用设置+ m来关闭它 如果在ksh下不起作用,请使用#!/ bin / bash

尝试脚本

答案 4 :(得分:0)

用C编程:

/* Kill process without printing 'Killed' or 'Terminated' message. */
kill(pid, SIGINT);

execl("/bin/bash", "bash", "-c", "kill -SIGINT `pidof <your command>` >/dev/null 2>&1", (char *)NULL);

killpid.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
/*
    $ gcc -W -Wall -O3 -std=c99 -pedantic -o killpid killpid.c
*/
#define LEN     10

int main()
{
    char line[LEN] = {0};
    FILE *cmd = popen("pidof <your command>", "r");

    fgets(line, LEN, cmd);
    pid_t pid = strtoul(line, NULL, 10);
    printf("pid: %ld\n", pid);

    /* Kill process without printing 'Killed' or 'Terminated' message.*/
    kill(pid, SIGINT);
    pclose(cmd);

    return 0;
}

通过kill命令:

$ kill -SIGINT `ps -ef | grep <your command> | awk '{print $2}'` >/dev/null 2>&1

$ kill -SIGINT `pidof <your command>`