Visit Our UNIX and Linux User Community


Stateless process


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Stateless process
# 1  
Old 09-13-2013
Stateless process

Hi Folks

I'm trying to monitor that a process is running, using ps.

Astonishingly the process, which is checked every 15 minutes, is runnnig but without a state about 2-3 times a day.

Extract from the script :
Code:
#!/bin/ksh

# edii_pid is PID of process to monitor.

# Checking if pid is listed in hosts processes.
# tr used for getting rid of potential leading blanks.
edii_pid_listed=`ps -p ${edii_pid} -o pid | grep -v "^  PID" | tr -d ' '`

if [[ ${edii_pid_listed} != ${edii_pid} ]]; then
  # So PID is listed, exists. In fact the process/application is runnig
  # for several days continuously.

  # Checking if pid is in running (=0) state.
  # tr used for getting rid of potential leading blanks.
  edii_pid_runnning=`ps -p ${edii_pid} -o s | grep -v "^S" | tr -d ' '`
  if [[ ${edii_pid_runnning} != 'O' ]]; then
    print "${edii_pid} isn't in running (O) state but ${edii_pid_runnning}!" 
  fi
fi

And for about 2-3 times a day i get this :
Code:
PID 2939 isn't in running (O) state but !

Any hints why a process that is running for days, has been "seen" in list of processes only microseconds before querying the state is stateless?

System is SunOS 5.10 Generic_148888-03 sun4v sparc SUNW,SPARC-Enterprise-T5220

Cheers

Michael
# 2  
Old 09-13-2013
I am confused by what you say you see. Processes either exist in the kernel process masthead or they do not exist. A non-running (terminated) process that has not been waited for is a zombie - the other possible states are states like sleep, swapped out, some kind of wait state, running, etc. There is no "stateless" value presented by ps.

I also do not get what your code is supposed to be doing.

If you want to check process existence try something like this:
Code:
# the 0 is a zero and does not harm the process, you have to be root or same user
# to signal any process
   kill 0 $pid && echo "$pid is alive" || echo "$pid is not alive"


Last edited by jim mcnamara; 09-13-2013 at 10:40 PM..
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 09-14-2013
Suggest you modify your script to better capture the raw process state. Something like the following (which I have not tested):
Code:
edii_pid_runnning=`ps -p ${edii_pid} -o s`
edii_pid_runnning_state=`echo ${edii_pid_runnning} | grep -v "^S" | tr -d ' '`
if [[ ${edii_pid_runnning_state} != 'O' ]]; then
    print "${edii_pid} isn't in running (O) state but is ${edii_pid_runnning}!" 
fi

This User Gave Thanks to fpmurphy For This Post:
# 4  
Old 09-14-2013
I guess the state becomes S (sleeping) that you are discarding with grep.
Improvement:
Code:
edii_pid_runnning=`ps -p ${edii_pid} -o s=`

And
Code:
edii_pid_listed=`ps -p ${edii_pid} -o pid=`

The = omits the ps header.
Leading spaces are removed by the shell if you use the variable unquoted in commands like
Code:
if [[ ${edii_pid_listed} != ${edii_pid} ]]; then


Last edited by MadeInGermany; 09-14-2013 at 11:45 PM..
This User Gave Thanks to MadeInGermany For This Post:
# 5  
Old 09-16-2013
Quote:
Originally Posted by MadeInGermany
I guess the state becomes S (sleeping) that you are discarding with grep.
Improvement:
Code:
edii_pid_runnning=`ps -p ${edii_pid} -o s=`

And
Code:
edii_pid_listed=`ps -p ${edii_pid} -o pid=`

The = omits the ps header.
Leading spaces are removed by the shell if you use the variable unquoted in commands like
Code:
if [[ ${edii_pid_listed} != ${edii_pid} ]]; then

Yep, that was it.

Added some more debug lines to the script and noticed that the process (S)leeps from time to time. Which is perfectly normal for unix.

So, puh, the world still _is_ a sphere after all. Just the usual PEBKAC. 8-)

Thanks all for replying!
# 6  
Old 09-16-2013
A further improvement:
In Solaris and Linux you can simply test for a known PID like this
Code:
if [[ -d /proc/${edii_pid} ]]; then
 echo "still alive"
else
 echo "dead"
fi

This User Gave Thanks to MadeInGermany For This Post:
# 7  
Old 09-16-2013
and on systems that don't, I believe you can just do

Code:
ps $pid >/dev/null 2>/dev/null || echo "$pid is dead"

This User Gave Thanks to Corona688 For This Post:

Previous Thread | Next Thread
Test Your Knowledge in Computers #211
Difficulty: Easy
The first routing protocol that was widely implemented, the Routing Information Protocol (RIP), calculated the shortest route based on geographic hops (the number of countries that an IP packet had to traverse to reach the destination host).
True or False?

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Command to get exact tomcat process I am running ignoring other java process

Team, I have multiple batchjobs running in VM, if I do ps -ef |grep java or tomcat I am getting multiple process list. How do I get my exact tomcat process running and that is unique? via shell script? (4 Replies)
Discussion started by: Ghanshyam Ratho
4 Replies

2. Shell Programming and Scripting

Monitoring processes in parallel and process log file after process exits

I am writing a script to kick off a process to gather logs on multiple nodes in parallel using "&". These processes create individual log files. Which I would like to filter and convert in CSV format after they are complete. I am facing following issues: 1. Monitor all Processes parallelly.... (5 Replies)
Discussion started by: shunya
5 Replies

3. UNIX for Advanced & Expert Users

Process remians in Running state causing other similar process to sleep and results to system hang

Hi Experts, I am facing one problem here which is one process always stuck in running state which causes the other similar process to sleep state . This causes my system in hanged state. On doing cat /proc/<pid>wchan showing the "__init_begin" in the output. Can you please help me here... (6 Replies)
Discussion started by: naveeng
6 Replies

4. UNIX for Advanced & Expert Users

Process remians in Running state causing other similar process to sleep and results to system hang

Hi Experts, I am facing one problem here which is one process always stuck in running state which causes the other similar process to sleep state . This causes my system in hanged state. On doing cat /proc/<pid>wchan showing the "__init_begin" in the output. Can you please help me here... (1 Reply)
Discussion started by: naveeng
1 Replies

5. BSD

Process remians in Running state causing other similar process to sleep and results to system hang

Hi Experts, I am facing one problem here which is one process always stuck in running state which causes the other similar process to sleep state . This causes my system in hanged state. On doing cat /proc/<pid>wchan showing the "__init_begin" in the output. Can you please help me here... (0 Replies)
Discussion started by: naveeng
0 Replies

6. Homework & Coursework Questions

Protect service with statefull, stateless

how to protect service dns with filtering tables (statefull, stateless)? iptables -L iptables ...? (1 Reply)
Discussion started by: nini
1 Replies

7. Shell Programming and Scripting

script to monitor the process system when a process from user takes longer than 15 min run.

get email notification from from system when a process from XXXX user takes longer than 15 min run.Let me know the time estimation for the same. hi ,any one please tell me , how to write a script to get email notification from system when a process from as mentioned above a xxxx user takes... (1 Reply)
Discussion started by: kirankrishna3
1 Replies

8. Shell Programming and Scripting

Shell Script to Kill Process(number of process) Unix/Solaris

Hi Experts, we do have a shell script for Unix Solaris, which will kill all the process manullay, it used to work in my previous env, but now it is throwing this error.. could some one please help me to resolve it This is how we execute the script (and this is the requirement) ... (2 Replies)
Discussion started by: jonnyvic
2 Replies

9. Shell Programming and Scripting

script to monitor process running on server and posting a mail if any process is dead

Hello all, I would be happy if any one could help me with a shell script that would determine all the processes running on a Unix server and post a mail if any of the process is not running or aborted. Thanks in advance Regards, pradeep kulkarni. :mad: (13 Replies)
Discussion started by: pradeepmacha
13 Replies

Featured Tech Videos