지금 당장 bash 스크립트는 1 PID 프로세스에서 작동하며 정확한 프로세스 이름을 입력해야합니다. 그것은 *firefox*' for example. Also, I run a bash script that opens multiple
rsync` 프로세스를 받아들이지 않을 것이고,이 스크립트가 모든 프로세스를 죽이게하고 싶습니다. 그러나이 스크립트는 PID가 1 개인 프로세스에서만 작동합니다.Bash 스크립트가 지정된 파일의 모든 PID를 죽이지 않거나 입력 부분 이름을 허용하지 않습니다.
#!/bin/bash
createProcfile() {
ps -eLf | grep -f process.tmp | grep -v 'grep' | awk '{print $2,$10}' | sort -u | egrep -o '[0-9]{4,}' > pid.tmp
# pgrep "$(cat process.tmp)" > pid.tmp
}
PIDFile=pid.tmp
echo "Enter a process name"
read -r process
echo "$process" > process.tmp
# node_process_id=$(pidof "$process")
node_process_id=$(ps -eLf | grep $process | grep -v 'grep' | awk '{print $2,$10}' | sort -u | egrep -o '[0-9]{4,}')
if [[ -z "$node_process_id" ]]; then
echo "Please enter a valid process."
rm process.tmp
exit 0
fi
ps -eLf | grep $process | awk '{print $2,$10}' | sort -u | grep -v 'grep'
# pgrep "$(cat process.tmp)"
echo "Would you like to kill this process(es)? (y/n)"
read -r answer
if [[ "$answer" == y ]]; then
createProcfile
pkill -F "$PIDFile"
rm "$PIDFile"
sleep 1
createProcfile
node_process_id=$(pidof "$process")
if [[ -z $node_process_id ]]; then
echo "Process terminated successfully."
rm process.tmp
exit 0
else
echo "Process not terminated. Kill process manually."
ps -eLf | grep $process | awk '{print $2,$10}' | sort -u | grep -v 'grep'
# pgrep "$(cat process.tmp)"
rm "$PIDFile"
rm process.tmp
exit 0
fi
fi
내가 스크립트 편집 : 여기
는 스크립트입니다. 귀하의 의견 덕분에, 지금 작동은 다음을- 만들기 스크립트는
- 이
1 개 이상의 PID
단순히 'pkill'을 대신 사용하지 않는 이유는 무엇입니까? – iruvar
예! @iruvar 감사합니다! 내가 당신에게 점수를 줄 수 있도록 질문에 대답하십시오. – Debug255