从shell scipt

时间:2015-12-05 10:56:03

标签: linux bash shell

mySample.sh

pid=$(ps -Af | grep $1 | grep -v grep | awk ' { print $2 } ');  
echo $pid

以上命令正在打印并终止为grep创建的临时进程 即使我没有运行Abcd的任何进程, 这是打印pid 任何忽略它的方法, iam实际上是使用grep -v忽略它,仍然......

./mySample.sh Abcd
 6251 6378 6379

获取进程ID的任何问题。?

基本命令行输出如下,运行名为Acc_Application_One

的进程后
  

[root @ localhost桌面] #ps -Af | grep Acc

     

root 6251 2758 0 16:16 pts / 1 00:00:00 ./Acc_Application_One

     

root 7288 2758 0 16:57 pts / 1 00:00:00 grep Acc

更改了mySample.sh

    pgrep -fl "$1" 

输出

  

[root @ localhost桌面] #mySample.sh Acc_Application_One

     

6251 7289

4 个答案:

答案 0 :(得分:0)

尝试更简单的方法:

pid=$(pgrep "$1")

如果你想要杀死它:

pkill "$1"

答案 1 :(得分:0)

要在命令行中的任何位置使用该模式终止进程,请使用double

pkill -f

根据pkill -f "$1"

  

man pkill在流程的完整参数字符串中匹配模式 where ,而不仅仅是可执行文件名。

同样,您可以使用-f列出匹配过程的进程ID。

答案 2 :(得分:0)

当你删除awk时问题会变得清晰:mySample.sh也会有Abcd。

ps -Af | grep " $1" | grep -Ev "grep|$0" | awk ' { print $2 } '

答案 3 :(得分:0)

使用以下代码更改了mySample.sh脚本 这只是使用发送的参数获取processId 杀了它

pid=$(pgrep -fl $1 | grep -v '[k]ill_script'| awk ' { print $1 } ')
echo $pid
if [[ -n ${pid} ]]; then
echo "Stopping Acc Application $1  with pid=${pid}"
kill -9 ${pid}
fi

由于