![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Rules & FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| killing the process | arthi | UNIX for Dummies Questions & Answers | 3 | 06-03-2008 05:57 AM |
| Killing of a process and send a mail if the process doesnot come up within 2 minutes | Prince89 | Shell Programming and Scripting | 1 | 02-15-2008 03:10 PM |
| killing a process from a script | jalge2 | AIX | 4 | 01-19-2006 06:46 AM |
| Killing a process from perl script. | sharuvman | Shell Programming and Scripting | 3 | 04-01-2004 09:10 AM |
| killing process using a script | skotapal | Shell Programming and Scripting | 4 | 12-12-2002 12:05 PM |
|
|
LinkBack | Thread Tools | Display Modes |
|
|||
|
While killing the process, Script gets hanged. Please help me on this.
Hi Everyone,
I have written a script to automate the docbase cleanup process on every weekly basis. That is in this script i have to shutdown the docbase and then kill all the process that are hanged except one process(epic process) and need to delete some log files and then i have to start the docbase. The following is the content of the script, #!/bin/ksh # docbase cleanup process DM_DBA=/apps/documentum/dba cd $DM_DBA # Next, set up the logfile. logdir=/apps/documentum/dba/log if [ ! -d $logdir ] ; then echo "$0: Fatal error: missing directory $logdir" exit 1 fi logfile=/apps/documentum/dba/log/test.log echo "\n *****Space before cleanup process**** \n" > $logfile df -k >> $logfile # process running before shut down echo "\n *************** Process running before shutdown **************** \n" >> $logfile ps -ef|grep doc >> $logfile #shut down Legal echo "\n ************** shut down Legal ************** \n" >> $logfile ./dm_shutdown_legal >> $logfile status=$? if [ ! $status = 0 ] ; then cat <<-END ***** ERROR DURING LEGAL SHUTDOWN ***** ********The legal dmshutdown utility reported a non-zero status ********** END exit 1 fi #shut down Docbroker echo "\n ********** shut down Docbroker *******************\n" >> $logfile ./dm_stop_docbroker status=$? if [ ! $status = 0 ] ; then cat <<-END ***** ERROR DURING DOCBROKER SHUTDOWN ***** ********The docbroker shutdown utility reported a non-zero status ********** END exit 1 fi #Killing all the process except the Epic process echo "\n *** Killing process except epic process ******* \n" >> $logfile ps -ef|grep doc| grep -v '/apps/documentum/epic5.1/bin/sun4r5/adeptlmd -s180 -e /apps/documentum/epic5.1/'|grep -v grep|awk '{print $2}'| xargs kill -9 echo "after killing the process" #Delete test.out file in buildcd buildcddir=/apps/documentum/cdrom/apps/buildcd if [ ! -d $buildcddir ] ; then echo "\n $0: Fatal error: missing directory $buildcddir \n" >> $logfile exit 1 fi buildcdfile= $buildcddir/test.out if [ -f $buildcdfile ] then echo "\n *************** test.out file exist in builcd path ****************\n" >> $logfile rm $buildcdfile >> $logfile fi #starting docbroker echo " \n ************* starting docbroker ************** \n" >>$logfile ./dm_launch_docbroker >>$logfile status=$? if [ ! $status = 0 ] ; then cat <<-END ***** ERROR DURING DOCBROKER STARTUP ***** ********The docbroker start utility reported a non-zero status ********** END exit 1 fi #starting legal echo "\n ************** starting legal *********** \n" >> $logfile ./dm_start_legal >>$logfile status=$? if [ ! $status = 0 ] ; then cat <<-END ***** ERROR DURING LEGAL STARTUP ***** ********The legal start utility reported a non-zero status ********** END exit 1 fi In the above code, the script gets hanged while executing the statement ps -ef|grep doc| grep -v '/apps/documentum/epic5.1/bin/sun4r5/adeptlmd -s180 -e /apps/documentum/epic5.1/'|grep -v grep|awk '{print $2}'| xargs kill -9 After this statement, the script is not executing any statement. If i remove this line alone, the script is running without any problem. But i have to kill all the processes that are hanged after the docbase has been shutdown. and then i have to start the docbase by calling another script which has been already written. Can anyone please tell me why is my script get hanged at this statement. Kindly please help me on how to resolve this probelm. Thanks in advance. Regards, Sheethal |
| Forum Sponsor | ||
|
|
|
|||
|
Hi,
But if i execute this command ps -ef|grep doc| grep -v '/apps/documentum/epic5.1/bin/sun4r5/adeptlmd -s180 -e /apps/documentum/epic5.1/'|grep -v grep|awk '{print $2}'| xargs kill -9 individually i dont have any issues, only when i execute this command in the script it gets hanged that is after this statemnt no other statement is getting exectued. can u please tell me why does it behaves like this........ |
|
|||
|
It seems the problem is with "xargs kill -9", the trailing end of the script. Better avoid using it and do as follows:
Code:
kill -9 `ps -ef|grep doc| grep -v '...'|grep -v grep|awk '{print $2}'`
or else you can use this also, if you know the process name before hand Code:
ps -ef | awk '$0~/<process-name>/&&$0!~/awk/{print $2}' | xargs kill -9
|
|
|||
|
BTW, "kill -9" is a really awful thing to do, it doesn't give a process the opportunity to clear up, and "atexit()" callbacks don't run.
This can then leak semaphores, shared memory, leave AF_UNIX sockets lying around and generally be really unkind. |
|
|||
|
Hi royalibrahim,
I tried your both solutions, kill -9 `ps -ef|grep doc| grep -v '...'|grep -v grep|awk '{print $2}'` and ps -ef | awk '$0~/<process-name>/&&$0!~/awk/{print $2}' | xargs kill -9 But still the script is getting hanged, any statement after this statement is not executed even a echo statement is not getting exectued. As you had said i believe the problem is while killing the process because when i give only the command ps -ef|grep doc| grep -v '...'|grep -v grep|awk '{print $2}' the script is getting executed without any problems. But when i append the command kill -9 along with ps -ef | awk '$0~/<process-name>/&&$0!~/awk/{print $2}' then the script is getting hanged that is no statement is executed after this kill statement. I dont have any clues about this issue and i am very new to Unix. kindly please help me on this. Thanks in advance. |
|
|||
|
Have you tried the "for" loop? for eg:
Code:
for pid in `ps -ef | grep doc | grep -v '...' | grep -v grep | awk '{print $2}'`
do
echo $pid
# kill -9 $pid
done
N.B: And also in the earlier command try altering the xargs kill -9 to xargs -i kill -9 {} 2> /dev/null and run it Last edited by royalibrahim; 10-10-2007 at 07:41 AM. |
|||
| Google UNIX.COM |