Kill pid


 
Thread Tools Search this Thread
Operating Systems AIX Kill pid
# 1  
Old 09-26-2015
Kill pid

I created a program to kill long running pid processes.

I am getting the following error message:

Code:
-f command cannot be found.

I also want to count the number of pids that are killed and append the results to a text file. I am new to shell script programming.

1.The first part of code is exporting a text file column containing ppids.

pid.txt contents are as follows:

Code:
Ppid
5569000
6789034
4567890
1234567
5678908
3457892

2. The second part of the code changes permission on the PpidFile

3. The third part of the code loops through the column in the text
file and kill each Ppid.

4. finally a line of text is appended to a text file. The text contains the total number of pids killed and the date.


Here is my code:
Code:
export PpidFile="/path/to/pids.txt"
if [[ -f "$PpidFile" ]]
then
	/bin/chmod 755 $PpidFile
	Ret=$?
	if [ 0 -eq $Ret ]
	then
		for RelatedEachPid in `/bin/grep -v "Ppid" $PpidFile | /usr/bin/tr "\n" " "`
		do
			/bin/echo "kill -9 $RelatedEachPid"
			/bin/kill -9 $RelatedEachPid
			Ret=$?
			if [ 0 -ne $Ret ]
			then
				/bin/echo "kill -9 $RelatedEachPid Fail"
			else
				/bin/echo "kill -9 $RelatedEachPid 
PIDkill"
			fi

echo "total of pids killed: wc-l $PIDkill -  $date" >> pidkill.txt

Moderator's Comments:
Mod Comment PLEASE use CODE tags for sample input and output as well as for code segments (as you have been asked to do before).

Last edited by Don Cragun; 09-26-2015 at 05:47 PM.. Reason: Add CODE and ICODE tags again.
# 2  
Old 09-26-2015
Quote:
Originally Posted by dellanicholson
I created a program to kill long running pid processes.

I am getting the following error message:

Code:
-f command cannot be found.

I also want to count the number of pids that are killed and append the results to a text file. I am new to shell script programming.

1.The first part of code is exporting a text file column containing ppids.

pid.txt contents are as follows:

Code:
Ppid
5569000
6789034
4567890
1234567
5678908
3457892

2. The second part of the code changes permission on the PpidFile

3. The third part of the code loops through the column in the text
file and kill each Ppid.

4. finally a line of text is appended to a text file. The text contains the total number of pids killed and the date.


Here is my code:
Code:
export PpidFile="/path/to/pids.txt"
if [[ -f "$PpidFile" ]]
then
	/bin/chmod 755 $PpidFile
	Ret=$?
	if [ 0 -eq $Ret ]
	then
		for RelatedEachPid in `/bin/grep -v "Ppid" $PpidFile | /usr/bin/tr "\n" " "`
		do
			/bin/echo "kill -9 $RelatedEachPid"
			/bin/kill -9 $RelatedEachPid
			Ret=$?
			if [ 0 -ne $Ret ]
			then
				/bin/echo "kill -9 $RelatedEachPid Fail"
			else
				/bin/echo "kill -9 $RelatedEachPid 
PIDkill"
			fi

echo "total of pids killed: wc-l $PIDkill -  $date" >> pidkill.txt

Moderator's Comments:
Mod Comment PLEASE use CODE tags for sample input and output as well as for code segments (as you have been asked to do before).
What shell are you using?

There is no reason to export a variable that you are not passing to another shell execution environment.

There is no reason to make a file that does not contain any executable text executable. Consider changing:
Code:
if [[ -f "$PpidFile" ]]
then
	/bin/chmod 755 $PpidFile
	Ret=$?
	if [ 0 -eq $Ret ]
	then	...

to something more like:
Code:
if [ -r "$PpidFile" ]
then	...

There is no need for the tr command in your command substitution. And a:
Code:
while read RelatedEachPid
do	if [ "$RelatedEachPid" = "Ppid" ]
	then	continue
	fi
	...
done < "$PpidFile"

would be much more efficient than:
Code:
for RelatedEachPid in `/bin/grep -v "Ppid" $PpidFile | /usr/bin/tr "\n" " "`
do	...
done

There is no done terminating your for loop.

There is no fi terminating your 1st two if statements.

There is nothing that sets the variables PIDkill and date before they are used.

It looks like you might be trying to count the lines in the file named by the variable PIDkill with the command:
Code:
echo "total of pids killed: wc-l $PIDkill -  $date"

but printing the string wc-l - won't do that. If you had set PIDkill to the pathname of a file, then something more like:
Code:
echo "total of pids killed: $(wc -l $PIDkill) -  $date"

might come closer to doing what you seem to be trying to do.

Last edited by Don Cragun; 09-26-2015 at 08:19 PM.. Reason: Drop extraneous closing ICODE tags.
This User Gave Thanks to Don Cragun For This Post:
# 3  
Old 09-26-2015
I do not think my syntax is correct.

Code:
PpidFile="/path/to/pids.txt"

Ret=$?     
if[0 -eq $Ret]

then 

while read RelatedEachPid [ /bin/grep -v "Ppid" ]
do			
                     /bin/echo "kill -9 $RelatedEachPid"
                        
                     /bin/kill -9 $RelatedEachPid
			Ret=$?

			if [ 0 -ne $Ret ]
			then
				/bin/echo "kill -9 $RelatedEachPid Fail"
			else
				/bin/echo "kill -9 $RelatedEachPid PIDkill"
   fi
fi
done <  $PpidFile 

echo "total of pids killed: $(wc -l $PIDkill) -  $date" >> pid_rm.txt

# 4  
Old 09-26-2015
You are correct. Your syntax is not correct.

I repeat: What shell are you using?
# 5  
Old 09-26-2015
I am using bash

Code:
#!/bin/bash
PpidFile="/path/to/pids.txt"

Ret=$?     
if[0 -eq $Ret]

then 

while read RelatedEachPid [ /bin/grep -v "Ppid" ]
do			
                     /bin/echo "kill -9 $RelatedEachPid"
                        
                     /bin/kill -9 $RelatedEachPid
			Ret=$?

			if [ 0 -ne $Ret ]
			then
				/bin/echo "kill -9 $RelatedEachPid Fail"
			else
				/bin/echo "kill -9 $RelatedEachPid PIDkill"
   fi
fi
done <  $PpidFile 

echo "total of pids killed: $(wc -l $PIDkill) -  $date" >> pid_rm.txt


Last edited by Don Cragun; 09-26-2015 at 10:27 PM.. Reason: Remove duplicated text.
# 6  
Old 09-26-2015
Making several wild guesses based on statements in earlier posts, try:
Code:
#!/bin/bash
PIDkill=0			# # of processes successfully killed.
PlogFile="/path/to/pidkill.txt	# File to receive log entries.
PpidFile="/path/to/pid.txt"	# File containing list of PIDs to kill.

# Verify that $PpidFile exists and is readable...
if [ ! -r "$PpidFile" ]
then	printf 'Cannot read file "%s"\n' "$PpidFile"
	exit 1
fi

# Process the PIDs in $PpidFile.
while read RelatedEachPid
do	# Check for the header line...
	if [ "$RelatedEachPid" = 'Ppid' ]
	then	# Header found, skip to next line from $PpidFile.
		continue
	fi

	# Kill the process.
	echo "kill -9 $RelatedEachPid"
	if kill -9 $RelatedEachPid
	then	# kill succeeded: note status and increment counter.
		echo "kill -9 $RelatedEachPid Success"
		PIDkill=$((PIDkill + 1))
	# Following two lines are commented out because the kill command will
	# print a diagnostic message if it fails; why produce two outputs?
	# else	# kill failed: note status.
	#	echo "kill -9 $RelatedEachPid Fail"
	fi
done < "$PpidFile"

# Log the results from this run.
echo "total of pids killed: $PIDkill - $(date)" >> "$PlogFile"

Note that:
  1. I added a line to explicitly use bash (since you didn't say how you invoked this script, the default shell on AIX is a 1988 version of the Korn shell, and the unknown -f command diagnostic could have come from ksh not recognizing [[ -f file ]] although I would have expected that to yield a complaint about [[ instead of about -f),
  2. a PIDkill variable has been created and it is incremented every time kill succeeds,
  3. a variable (PlogFile) has been added to specify the pathname of the output log file (that file was the only file in your script that didn't use an absolute pathname and there is nothing in your script to control the directory in which it runs),
  4. the filename that is the last component in the PpidFile variable has been changed to match the filename specified in post #1 in this thread, and
  5. your reference to the undefined variable date was replaced with a command substitution of the date utility.
This User Gave Thanks to Don Cragun For This Post:
# 7  
Old 09-27-2015
HP Thanks awesome Don

Thanks, you are so awesome!!!!!!!!!!!!!!!!!!!!!!!!!Smilie

Quote:
Originally Posted by Don Cragun
Making several wild guesses based on statements in earlier posts, try:
Code:
#!/bin/bash
PIDkill=0			# # of processes successfully killed.
PlogFile="/path/to/pidkill.txt	# File to receive log entries.
PpidFile="/path/to/pid.txt"	# File containing list of PIDs to kill.

# Verify that $PpidFile exists and is readable...
if [ ! -r "$PpidFile" ]
then	printf 'Cannot read file "%s"\n' "$PpidFile"
	exit 1
fi

# Process the PIDs in $PpidFile.
while read RelatedEachPid
do	# Check for the header line...
	if [ "$RelatedEachPid" = 'Ppid' ]
	then	# Header found, skip to next line from $PpidFile.
		continue
	fi

	# Kill the process.
	echo "kill -9 $RelatedEachPid"
	if kill -9 $RelatedEachPid
	then	# kill succeeded: note status and increment counter.
		echo "kill -9 $RelatedEachPid Success"
		PIDkill=$((PIDkill + 1))
	# Following two lines are commented out because the kill command will
	# print a diagnostic message if it fails; why produce two outputs?
	# else	# kill failed: note status.
	#	echo "kill -9 $RelatedEachPid Fail"
	fi
done < "$PpidFile"

# Log the results from this run.
echo "total of pids killed: $PIDkill - $(date)" >> "$PlogFile"

Note that:
  1. I added a line to explicitly use bash (since you didn't say how you invoked this script, the default shell on AIX is a 1988 version of the Korn shell, and the unknown -f command diagnostic could have come from ksh not recognizing [[ -f file ]] although I would have expected that to yield a complaint about [[ instead of about -f),
  2. a PIDkill variable has been created and it is incremented every time kill succeeds,
  3. a variable (PlogFile) has been added to specify the pathname of the output log file (that file was the only file in your script that didn't use an absolute pathname and there is nothing in your script to control the directory in which it runs),
  4. the filename that is the last component in the PpidFile variable has been changed to match the filename specified in post #1 in this thread, and
  5. your reference to the undefined variable date was replaced with a command substitution of the date utility.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Kill PID with one liner

Hello Friends, I've been trying to write a one line which checks java processes and filter them for a user (testuser) and then check process arguments with PARGS command and then check if there is certain patterns exists in pargs output then kill the process. I have tried the following so... (2 Replies)
Discussion started by: EAGL€
2 Replies

2. Shell Programming and Scripting

Kill a PID using script

Hi, I wrote a script to kill a process id. I am able to kill the PID only if I enter the root password in the middle of the execution because I did not run as root i.e after i run the script from the terminal, instead of killing directly, it is killing only after entering the pass when it... (12 Replies)
Discussion started by: rajkumarme_1
12 Replies

3. Shell Programming and Scripting

How to Kill process with dynamic PID?

Hello, I have problem with killing red5 process running on linux server. As this process is continuously changing its PID so it can't be killed with "kill -9 PID" command. First I used following command to list RED5 process ps aux | grep red5 which showed me root 5832 0.0 0.0 4820 756pts/0... (4 Replies)
Discussion started by: ninadgac
4 Replies

4. UNIX for Dummies Questions & Answers

How to Kill process with dynamic PID?

Hello, I have problem with killing red5 process running on linux server. As this process is continuously changing its PID so it can't be killed with "kill -9 PID" command. First I used following command to list RED5 process ps aux | grep red5 which showed me root 5832 0.0 0.0 4820 756pts/0... (1 Reply)
Discussion started by: ninadgac
1 Replies

5. AIX

kill -3 <PID> ... where the output file goes?

Hi all, I am generating the coredump of my JBoss, and by default it puts it in to a particular directory. i.e. JBOSS_HOME/. I would like this output file to be created, lets say in /tmp/dump/. I tried the following: kill -3 9404940>/tmp/dump/out.txt But it created... (3 Replies)
Discussion started by: haroon_a
3 Replies

6. Shell Programming and Scripting

When kill [pid] does not work...

Hi, On my Linux machine, using Bash, I sometimes run into a situation where doing the following does not seem to work at all. kermit@fastbox ~ $ ps -A | grep firefox-bin 5375 ? 00:06:57 firefox-bin <defunct> 5624 ? 00:00:00 firefox-bin kermit@fastbox ~ $ kill 5624... (7 Replies)
Discussion started by: kermit
7 Replies

7. UNIX for Advanced & Expert Users

KILL without PID

Hellow Experts i have one problem. i run one script in backgroun. and i want to kill that script with only script name..... so what's the solution.. for your info my script name is "testscript" n it contains "sleep 100" thanks.... (16 Replies)
Discussion started by: luckypower
16 Replies

8. Shell Programming and Scripting

KILL PID, intern should kill another PID.

Hi All, In my project i have two process runs in the back end. Once i start my project, and execute the command ps, i get below output: PID TTY TIME CMD 9086 pts/1 0:00 ksh 9241 pts/1 0:02 java 9240 pts/1 0:00 shell_script_bg java with 9241 PID is the main... (4 Replies)
Discussion started by: rkrgarlapati
4 Replies

9. Shell Programming and Scripting

pass pid to kill using script

Hi there, i wonder if anyone can help is there any way that i can write a script that will kill all current ftp processes, for example if ps -ef | grep ftp produces 3 active proceses, then I would like to somehow extract the PID for each one and pass that to kill -9 has anybody done this... (2 Replies)
Discussion started by: hcclnoodles
2 Replies

10. UNIX for Dummies Questions & Answers

display went awkwards after issue kill pid

hi, i kill a process which is topas. then i do a fg of the process itself and got this Signal 15 received.finally, the display went as belows.... root@myhost:/]ksh: ^L^L^Lps: not found. root@myhost:/] PID TTY TIME CMD ... (4 Replies)
Discussion started by: yls177
4 Replies
Login or Register to Ask a Question