创建一个常驻测试脚本
touch backtest.sh
vi backtest.sh
内如如下:
#! /bin/bash
for((;;))
do
echo "hello."
sleep 3
done
添加可执行权限
chmod +x backtest.sh
执行脚本
./backtest.sh
会心跳式输出log
查询进程
ps -A | grep backtest.sh
输出如下
11433 ?? 0:00.01 /bin/bash /Users/w/bash/backtest.sh
11437 ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox backtest.sh
看到第一条信息是backtest.sh在运行,第二条是刚刚执行的ps命令。
过滤grep进程
ps -A | grep backtest.sh| grep -v grep
linux 杀死进程xxx
方式1: ps -ef|grep backtest.sh|grep -v grep|xargs kill -9
方式2:ps x|grep backtest.sh|grep -v grep |awk '{print $1}'|xargs kill -9
方式3: kill -9 $(ps -A|grep backtest.sh|grep -v grep)
下面将这条命令作一下简单说明:
管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
"ps -A" 是linux里查看所有进程的命令。
"grep -v grep" 是在列出的进程中去除含有关键字"grep"的进程。
"xargs kill -9" 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。
另外:
"cut -c 9-15" 是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
java exec
java在exec执行带有管道符的命令时,管道符无效。
解决方法是使用-c参数,以字符串方式读取命令如下:
linux下:
String[] command = { "/bin/sh", "-c", "ps -A|grep backtest.sh|grep -v grep"};
Process p = rt.exec(command);
windows下:
String[] command = { "cmd", "/c", cmds};
Process p = rt.exec(command);