Recursive pid script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Recursive pid script
# 1  
Old 05-02-2007
Recursive pid script

I'm trying to create a script that allows me to determine all the pid's that spawned from an original process(ie - who's running this command)....

I've created a script that searches the processes running based on an argument passed the script. It then is to get the parent pid and look that up....It should recursively look up each subsequent parent pid until it can't find any....

I need to be able to pass a variable, parent pid, into a ps -f -p command, but it keeps failing.....

Help!! Any ideas??

Here is the script......

#!/bin/ksh
touch running.out
pid_file=pid_file.lst
ppid_file=ppid_file.lst
while [ -f running.out ]
do
echo "checking for $1 session"
ps -ef|grep $1|grep -v root|cut -f5 -d" " > $pid_file

if [ -s $pid_file ];
then
echo "$1 session found"
while read item;
do
echo "Looking for parent pid - $item"
ps -f -p$item|cut -f5 -d" " > $ppid_file
echo "$ppid_file"
while [ -s $ppid_file ]
do
while read item;
do
ps -f -p$item|cut -f5 -d" " > $ppid_file
echo "$ppid_file"
done < $ppid_file
done
done < $pid_file
else
echo "$1 session is not on the system"
rm running.out
fi

done
rm $pid_file
rm $$ppid_file

---- the error I'm getting is: ps --p needs an argument

Last edited by jbarnhar; 05-02-2007 at 11:48 AM..
# 2  
Old 05-02-2007
Your shell script is very involved with several loopings.
It would be time consuming to make it work.
Whithout going thru your logic, I can advise you in two things:
1) The problem you are having with the "ps --p needs an argument" is
because you are using a variable that is empty/null.
Try displaying (echo) all parameters before executing each command.
Example:
echo "item = <${item}>"
ps -f -p$item
There is a large probability that the variable "item" is empty/null at one point.
2) Your script still has an error -- missing a double quote ("):
echo $1 session found"
# 3  
Old 05-02-2007
Thanks for the response Shell Life.....

The line above the ps -f -p$item|cut -f5 -d" " includes the $item variable which does have a value....Here is the output when the script is run.....

# ./tunnel_ppid.sh ora_mmon_olap

checking for ora_mmon_olap session
ora_mmon_olap session found
Looking for parent pid - 6008
ppid_file.lst
ps: option requires an argument -- p
usage: ps [-edaxzflP] [-u ulist] [-g glist] [-p plist] [-t tlist] [-R prmgroup] [-Z psetidlist]
ppid_file.lst
# 4  
Old 05-02-2007
Thanks for the help everyone.....

I ended up figuring out the solution pending your assistance....Here is the updated code if anyone cares.....LOL

#!/bin/ksh
touch running.out
pid_file=pid_file.lst
while [ -f running.out ]
do
ps -ef|grep $1|grep -v root|cut -f5 -d" " > $pid_file
ps -ef|grep $1|grep -v root
if [ -s $pid_file ];
then
while read item;
do
xcmd=$(ps -f -p$item|grep $item|cut -c16-20)
echo $(ps -f -p$item|grep $item)
if [ -n $xcmd ];
then
touch looping.out
while [ -f looping.out ]
do
xcmd2=$(ps -f -p$xcmd|grep $xcmd|cut -c16-20)
echo $(ps -f -p$xcmd|grep $xcmd)
if [ -n $xcmd2 -a "${xcmd2}" != ' 0' ];
then
xcmd=$(ps -f -p$xcmd2|grep $xcmd2|cut -c16-20)
echo $(ps -f -p$xcmd2|grep $xcmd2)
else
echo "No additional Parent PID found"
rm looping.out
exit
fi
done
else
echo "No Parent PID found"
fi
done < $pid_file
else
echo "$1 session is not on the system"
rm running.out
fi
done


The output generated looks like this:

# ./tunnel_ppid.sh sqlplus
oracle 7171 3591 0 15:06:29 pts/ta 00:00 /U03/app/oracle/product/10.2.0/bin/sqlplus -s
oracle 7171 3591 0 15:06:29 pts/ta 0:00 /U03/app/oracle/product/10.2.0/bin/sqlplus -s
oracle 3591 5120 0 14:42:57 pts/ta 0:00 /bin/ksh ./refresh_tables.sh
oracle 5120 5069 0 16:24:00 pts/ta 0:00 -su
dc01928 5069 5068 0 16:23:20 pts/ta 0:00 -sh
root 5068 1261 0 16:23:19 pts/ta 0:00 telnetd
root 1261 1 0 16:12:59 ? 0:00 /usr/sbin/inetd -l
root 1 0 0 16:11:49 ? 0:06 init
root 0 0 0 16:11:49 ? 0:22 swapper
No additional Parent PID found

Which shows you the progression of who is ultimately running a process.....
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help with creating recursive unzip script

Hello. I am trying to create a script that recursively looks at my folder structure, and extracts any .7z files that have not already been extracted yet. I know that all .7z files only have a single .txt file in them, and the only .txt file in any directory would be from that .7z file. I am... (3 Replies)
Discussion started by: Davinator
3 Replies

2. Shell Programming and Scripting

help with recursive handbrake script

I have a batch of mkv video files I would like to transcode to a more compressed format. After spending a significant amount of time experimenting with various parameters I think I have found the handbrake settings that give the best compromise. I now want to construct a simple bash script... (4 Replies)
Discussion started by: jonesal2
4 Replies

3. Shell Programming and Scripting

Logic needed to recursive looping in the script

Hello i have a requirement where in a file i will get string. The length could be from 1 to 20. if the string is less than 6 characters ( ex: ABCD) . i need to append 'X' on right hand side to make it 6 characters (ex: ABCDXX). if suppose i get the same string from the file as ABCDXX then i... (5 Replies)
Discussion started by: dsdev_123
5 Replies

4. Shell Programming and Scripting

Recursive Shell script

I'm trying to run the script below recursively but it is generating multiple and simultaneous processes. how do I do to start same script again (last line of my script) only after he had just run entirely? The file name is bachup.sh I am using this command: # / bin / bash / ... (8 Replies)
Discussion started by: sprool
8 Replies

5. Shell Programming and Scripting

pid.cleanup script.

Hi guys! I have a directory in the production environment from which i have to delete files older then 40 minutes with .pid extention. I wrote a script below for the purpose. #!/bin/bash # # Script to delete specific file older than N minutes. # OLDERTHAN="40" #40 minutes ... (6 Replies)
Discussion started by: sajid.shah
6 Replies

6. UNIX for Dummies Questions & Answers

Need to get pid of a process and have to store the pid in a variable

Hi, I need to get the pid of a process and have to store the pid in a variable and i want to use this value(pid) of the variable for some process. Please can anyone tell me how to get the pid of a process and store it in a variable. please help me on this. Thanks in advance, Amudha (7 Replies)
Discussion started by: samudha
7 Replies

7. Shell Programming and Scripting

Script problem due to recursive directories Help please

Hello everyone , I am looking for a better solution then the one I have created for the my Task The task is: Create an automated script that will check for Uploads in a specified Directory and move them to another specified Directory if the files are completely uploaded. Files are FTP'd to... (2 Replies)
Discussion started by: robertmcol
2 Replies

8. UNIX for Dummies Questions & Answers

Session PID & socket connection pid

1. If I use an software application(which connects to the database in the server) in my local pc, how many PID should be registered? Would there be PID for the session and another PID for socket connection? 2. I noticed (through netstat) that when I logged in using the my software application,... (1 Reply)
Discussion started by: pcx26
1 Replies

9. Programming

printing ppid,child pid,pid

question: for the below program i just printed the value for pid, child pid and parent pid why does it give me 6 values? i assume ppid is 28086 but can't figure out why there are 5 values printed instead of just two! can someone comment on that! #include<stdio.h> #define DIM 8 int... (3 Replies)
Discussion started by: a25khan
3 Replies
Login or Register to Ask a Question