在bash中,我想杀死一个进程,以防它存在。
我正在运行此命令:
netstat -lp | grep 9876
输出1或0行。
如果它有输出1行,它看起来像这样:
tcp 0 0 *:9876 *:* LISTEN 18449/java
所以我想要以下内容:
18849
,所以java
进程。然后我会杀了它。
我不知道如何做1和2。有什么想法吗?
答案 0 :(得分:4)
使用启用了-r
功能的GNU xargs
和GNU grep
中的PCRE
开关,
netstat -lp | grep -oP '(?<=LISTEN ).*(?=/java)' | xargs -r kill
-r
xargs
标记
-r, --no-run-if-empty
If the standard input does not contain any nonblanks, do not run the command.
Normally, the command is run once even if there is no input. This option is a GNU
extension.
答案 1 :(得分:4)
bash
正则表达式匹配就足够了;不需要grep
:
regex='LISTEN ([[:digit:]]+)/java'
if [[ $(netstat -lp) =~ $regex ]]; then
kill "${BASH_REMATCH[1]}"
fi