Shell 以进程名称和时间作为输入在特定时间终止进程的脚本

Shell script to kill a process in specific time with process name and time as input

我需要一个 shell 脚本来在特定时间后通过获取进程名称和时间作为输入来终止特定 运行 进程。

我正在使用 centos 机器我已经尝试了脚本但是无法完成在特定时间终止进程。

#!/bin/bash
read -p 'Process: ' name 
read -p 'Timecontrol: ' time

ps -ef | grep $name | awk '{print }'
pkill -9 "$name"

在特定时间内终止进程的预期输出将作为输入给出。

  • 您可以使用 cron 作业在特定日期和时间终止进程。

  • 如果必须使用脚本:

    #!/bin/bash

    read -p 'Process: ' name
    read -p 'Timecontrol: ' timecontrol
    while :
    do
      now="$(date --date="$(date +%H:%M)" +%s)"
      x="$(date --date="$timecontrol" +%s)"
      if [ $now == $x ]
      then
        ps -ef | grep $name | awk '{print }'
      fi
    done

注:

  • 如果您打算永远 运行 此脚本,请删除 #

脚本不会在您想要将其作为输入的特定时间终止进程,因为脚本会 运行 并且不会等待特定时间。

你可以用两种方式逗它。

  • 循环,但它将再次 运行 在前台
  • 定时任务
    #!/bin/bash
    EXIT_ON_KILL=true
    read -p 'Process: ' name
    read -p 'Timecontrol: ' timecontrol        
    while :
    do
    current_time=$(date +"%T")
    echo $current_time "control "
    current_time=$(echo $current_time | cut -d':' -f1-2)    
      if [ "${timecontrol}" == "${current_time}" ]
      then
        echo "killing process"
        kill -9 $(ps -ef | grep $name | awk '{print }')
        if [ $? -eq 0 ]; then
            echo "Process killed having name $name and having $pid"
            if [ $EXIT_ON_KILL == true ];then
            exit 0
            fi
        else
            echo "Failed to Kill process having name $name"
            exit 1
        fi

      fi
    sleep 2
    done

awk '{print }'这个returnPID在ubuntu,如果没有就必须签入Centos returns PID然后将其更改为 awk '{print }'

所以你可以 运行 和

./kill_process.sh
Process: node
Timecontrol: 00:21

使用 Cron 作业,您不需要传递时间,只需传递进程的名称,脚本将 运行 在指定的时间终止进程。

#!/bin/bash
EXIT_ON_KILL=true
p_name=
kill -9 $(ps -ef | grep $p_name | awk '{print }')
  if [ $? -eq 0 ]; then
        echo "Process killed having name $p_name and having $pid"
        if [ $EXIT_ON_KILL == true ];then
        exit 0
        fi
  else
        echo "Failed to Kill process having name $p_name"
        exit 1
  fi

Create-cron-job-on-CentOS

0 0 * * * /path_to_script/kill_process.sh node

这将在每天午夜终止进程

  • 使用此脚本,您可以通过提供进程名称和时间在特定时间终止 运行 进程。
    [注意:时间的输入必须以秒为单位,即 120 表示 2 分钟]
#!/bin/bash

LOG=/tmp/kill.log
EXIT_ON_KILL=true
read -p 'Process: ' name
read -p 'killat: ' time

PID=$(ps -ef | grep $name | awk '{print }')
ps -ef | grep $name | awk '{print }' &>>$LOG

  if [ $? -eq 0 ]; then
  echo -e "\n The process details "
  ps -p $PID 
  else
    echo -e "\nInvalid Process Name" 
  fi

current=$(date +"%T")
killat=$(date -d "+"$time" seconds" "+%T")
echo -e "\nCurrent time $current \nThe time target is $killat"

while : 
do
current=$(date +"%T")
echo $current  

  if [ "${killat}" == "${current}" ]
  then   
    kill -9 $PID   &>>$LOG
    if [ $? -eq 0 ]; then
        echo "Process $name have been successfully killed"  
        if [ $EXIT_ON_KILL == true ];then
        exit 0
        fi
    else
        echo -e "\nFailed to Kill process $name" 
        echo -e "\nMay be Invalid Process Name" 
        exit 1
    fi

  fi
sleep 2
done

示例输入:

Process: xxxx
Killat: 120