我有一个在后台运行的任务(appium服务器)。我通过运行命令appium &
开始了这项任务。运行我的测试后,我需要杀死appium。我尝试运行kill <pid_of_appium>
,但任务没有立即被杀死。我手动必须按 Enter 键才能将其删除。
我最初认为这只是appium的问题,但我尝试运行几个后台任务,所有这些任务只有在按下Enter键后才会被杀死。我如何通过代码处理这个问题,因为我需要使用shell命令以编程方式停止后台任务
答案 0 :(得分:0)
如果任务没有响应常规kill
命令,您可以尝试使用kill -9
。添加-9
导致kill
程序派遣更多无情的刺客来执行契约,而不是正常版本。
答案 1 :(得分:0)
小心使用kill -9
。它可能导致数据损坏和与之相关的潜在问题。我发现这个脚本应该尝试用信号-15杀死进程,然后用信号-9作为最后的手段。
#!/bin/bash
# Getting the PID of the process
PID=`pid_of_appium`
# Number of seconds to wait before using "kill -9"
WAIT_SECONDS=10
# Counter to keep count of how many seconds have passed
count=0
while kill $PID > /dev/null
do
# Wait for one second
sleep 1
# Increment the second counter
((count++))
# Has the process been killed? If so, exit the loop.
if ! ps -p $PID > /dev/null ; then
break
fi
# Have we exceeded $WAIT_SECONDS? If so, kill the process with "kill-9"
# and exit the loop
if [ $count -gt $WAIT_SECONDS ]; then
kill -9 $PID
break
fi
done
echo "Process has been killed after $count seconds."
答案 2 :(得分:0)
尝试pkill
和pgrep
:
pgrep, pkill -- find or signal processes by name
要查找过程并打印PID,您可以使用:
pgrep -l appium
要杀死你可以做的所有过程:
pkill appium
如果想要发送一个KILL 9
信号,你可以这样做;
pkill 9 appium