ps can show you a list of process ids and their current state:
ps -eo stat -o pid -o comm
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:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped by job control signal
t stopped by debugger during the tracing
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by
its parent
For BSD formats and when the stat keyword is used, additional
characters may be displayed:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads
do)
+ is in the foreground process group
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"
ps -eo stat -o pid | awk '$1=="S" && $3=="myapp" { print $2 }'
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:
ps -eo stat -o pid | awk '$1=="S" { system("./restartscript "$2) }'