首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pgrep检测重复进程

pgrep检测重复进程
EN

Stack Overflow用户
提问于 2013-09-26 19:57:35
回答 3查看 6.6K关注 0票数 0

我正在尝试使用pgrep来首先检测进程是否正在运行,如果正在运行,则确定进程是否被意外复制(运行)。如果是这样的话,它应该会杀死重复的进程。

代码语言:javascript
复制
if ! pgrep -f "java" > /dev/null; then
  echo "Yes its running but there may be duplicates"
  < Now check for duplicates here and kill if necessary >
fi

请帮帮忙

* UPDATE *

ps辅警:

代码语言:javascript
复制
debian    2521  3.8  5.4 407212 27524 pts/0    Sl   20:16   0:08 java -cp somefile.jar

代码:

代码语言:javascript
复制
if [ $(pgrep -f "somefile.jar" | wc -l) -gt 1 ]; then
  kill $(pgrep -f "somefile.jar" | grep -v $(pgrep -o "somefile.jar") | awk '{printf $1" "}');
fi

工作但抛出一个错误

* UPDATE *

下面是我的代码的直接粘贴:

代码语言:javascript
复制
if [ $(pgrep -f java | wc -l) -gt 1 ]; then
  echo "kill $(pgrep -f java | grep -v $(pgrep -of java) | sort -n | uniq | awk '{printf $1" "}')";
fi
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-26 20:06:38

这应该可以做到:

代码语言:javascript
复制
#!/bin/bash

if [ $(pgrep -f java | wc -l) -gt 1 ]; then 
  kill $(pgrep -f java | grep -v $(pgrep -of java) | sort -n | uniq | awk '{printf $1" "}');
fi

pgrep -o将为您提供最古老的(很可能是第一个) java进程。您想要grep -v这个过程并杀死其他人。

票数 2
EN

Stack Overflow用户

发布于 2013-09-26 20:06:00

您正在使用pgrep的返回代码,但是如果需要知道多少输出,则输出可能更有用。

代码语言:javascript
复制
HOW_MANY_JAVAS = $(pgrep -f 'java' | wc -l)
if ((HOW_MANY_JAVAS > 1)) ; then
  echo 'too much Java.'
fi
票数 1
EN

Stack Overflow用户

发布于 2013-09-26 20:06:00

举个例子:

代码语言:javascript
复制
# Collect pids of all java processes in sorted order.
readarray -t PIDS < <(exec pgrep -f java | sort -n)

# Kill all pids except the first.
[[ ${#PIDS[@]} -gt 1 ]] && kill "${PIDS[@]:2}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19037525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档