Im Moment funktioniert mein Bash-Skript für 1 PID-Prozesse und ich muss einen genauen Prozessnamen für die Eingabe verwenden. Es akzeptiert keine *firefox*' for example. Also, I run a bash script that opens multiple
rsync` Prozesse, und ich möchte, dass dieses Skript alle diese Prozesse abbricht. Aber dieses Skript funktioniert nur bei Prozessen mit 1 PID. HierBash-Skript löscht nicht alle PIDs in der angegebenen Datei oder erlaubt teilweise Namen für die Eingabe
ist das Skript:
#!/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
ich das Drehbuch bearbeitet. Dank Ihre Kommentare, es funktioniert jetzt und macht folgende:
- Make Skript akzeptiert Teilnamen als Eingabe
- töten mehr als 1 PID
Thank you!
Warum nicht einfach 'pkill' verwenden? – iruvar
Ja! @iruvar Danke! Bitte beantworte die Frage, damit ich dir Punkte geben kann. – Debug255