我开发了一个脚本,通过给定的PID(作为参数)查找正在运行的线程的数量。我们可以运行一次,一切都很完美。 但是,为了我们的需要,我必须让它与启动和停止选项一起运行。 意思是,直到我没有让它停止脚本周记录线程号。 我尝试在下面的代码中这样做,但似乎没有运气
PID=$1
Command=$2
scriptPID=`echo $$`
#going to check if arguments were supplied if not using the defaults. if only one argument supplied then aborting.
if [[ $PID -eq 0 ]]
then
echo -e "\n[ERROR]: No PID was provided. please provide PID as argument.\n"
exit 1
fi
initCommand(){
#local Command="$2";
case $Command in
start)
start "true"
;;
stop)
stop -f "true"
;;
esac
}
start(){
#going redirect stout & stderr to log file
echo "starting"
echo "script PID $scriptPID"
exec 1>>pidThreadNumber.log 2>&1
while (true); do
runningThreads=`ps huH p $PID | wc -l`
date;
echo "-------------------------------"
echo -e "Number of running threads: "$runningThreads"\n\n"
sleep 2
done
}
stop()
{
kill -9 $scriptPID
}
initCommand $Command
谢谢大家的帮助
答案 0 :(得分:0)
它不起作用,因为每次执行命令时都会有不同的进程,因此会有不同的scriptPID。因此你可以:
将进程的pid存储在您再次找到它的文件中并使用它来终止它
通过查看ps
的所有流程并按名称选择正确的流程来搜索要杀死的流程。
添加。您可以实现"守护进程模式"你的脚本。一种方法是接受-d
选项,在这种情况下,在后台运行脚本本身(没有-d
!)将子项的IP写入文件然后退出。然后你可以从文件中读取IP以便以后停止孩子。