我编写了以下脚本,如果grep在文件中找不到相关字符串,则会启用超时20秒。
该脚本运行良好,但脚本的输出如下:
./test: line 11: 30039: Killed
如何从kill命令禁用此消息?
如果进程不存在,如何告诉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
答案 0 :(得分:3)
kill -9 $RESULT &> /dev/null
这会将stdout
和stderr
发送到/ 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>`