在mac中杀死后台任务

时间:2017-09-28 19:05:45

标签: shell

我有一个在后台运行的任务(appium服务器)。我通过运行命令appium &开始了这项任务。运行我的测试后,我需要杀死appium。我尝试运行kill <pid_of_appium>,但任务没有立即被杀死。我手动必须按 Enter 键才能将其删除。

我最初认为这只是appium的问题,但我尝试运行几个后台任务,所有这些任务只有在按下Enter键后才会被杀死。我如何通过代码处理这个问题,因为我需要使用shell命令以编程方式停止后台任务

3 个答案:

答案 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)

尝试pkillpgrep

pgrep, pkill -- find or signal processes by name

要查找过程并打印PID,您可以使用:

pgrep -l appium

要杀死你可以做的所有过程:

pkill appium

如果想要发送一个KILL 9信号,你可以这样做;

pkill 9 appium