I was wondering if you have any scripts that take the PID of the processes that are sleeping (S) and restart it automatically
restart_pid() {
# First we need to find the program's arguments
SAVED_COMMAND="$(while IFS= read -r -d $'\0' f; do printf '%q ' "$f"; done < /proc/$1/cmdline)"
# Then we need to cd into its directory so that we stay as true to the intial conditions as possible
cd /proc/$1/cwd
# Now kill the process
kill $1
# Now we can restart the process
eval $SAVED_COMMAND
}
ps -ef
Zoho 3
htop
restart_pid 23924
kill -HUP 23924
I use a script to restart the process via the PID, but every time I need to pass the PID in the script. Is there any way to automate this?
ps can show you a list of process ids and their current state:
Further information taken from the ps man pages about the state codes:
PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process:
The ps command will no doubt will need further refining based on process name (comm) and this can be done through awk. So for example, looking for processes named "myapp"
Check that the process state (first space delimited field) is S and the process name (third space delimited field) is equal to myapp. Finally, assuming that the processes are as expected (IMPORTANT STEP), this can be integrated with your restart script to restart all the processes by utilising awk's system function: