I don't think you can do that easily in a shell script.
But if you control the killing process you can have it transfer its PID to the process that is to be killed, through a named pipe in /tmp for example:
Code:
#!/bin/ksh
hello () {
print "in hello";
read killproc < "$pipe"
print "PID of process that issued SIGNAL: $killproc"
exit
}
pipe=/tmp/killerproc.$$
mkfifo $pipe
trap "rm -f $pipe" EXIT
trap hello SIGKILL SIGTERM
while true
do
print "in loop of process $$";
sleep 1;
done
And then kill the process with something like this:
Code:
# killpid=<pid of process to be killed>
pipe=/tmp/killerproc.$killpid
kill "$killpid" ; echo $$ > $pipe
This would need to be refined, but you get the idea.
Last edited by Scrutinizer; 09-03-2016 at 05:21 AM..
This User Gave Thanks to Scrutinizer For This Post:
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)
gurus,
normally to stop a process ,i need to kill all its child & then parent process.
i do it manually as follows
bash-2.03$ ps -ef | grep bpm|grep -v grep
tibadmin 21882 21875 0 May 27 ? 0:00 /bin/sh ./bpmse_20.sh -Xms512m -Xmx512m /tibco/UpdateCustomer/dat/UpdateCustome
... (0 Replies)
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)
Hi folks,
I have tried to add some trap detection in the below script....this script is used to monitor database activities...in a rather awkward way :rolleyes:....
The idea behind adding trap is that....this script creates lots of temporary files in the running folder to store the count... (1 Reply)
Say I have 2 processes(perl scripts on Solaris machine) A and B.
the process A kill the process B.
While in the process B how do I print the PID of the process that Killed it(process A) before dieing.
My process A looks like
open(STATS, "ps -ef|");
while ($inputLine = <STATS>) {
if... (7 Replies)
I had issues with processes locking up. This script checks for processes and kills them if they are older than a certain time.
Its uses some functions you'll need to define or remove, like slog() which I use for logging, and is_running() which checks if this script is already running so you can... (0 Replies)
Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!
1. The problem statement, all variables and given/known data:
That is the last reply I received from my instructor, and I'm looking for some alternatives.
When using... (2 Replies)
Hello:
Am trying to understand why the method #2 works but method #1 does not.
For both methods, sending CTRL+C should kill both the Parent script & all of the spanwd background procs.
Method #1:
==========================
#!/bin/sh
ctrl_c()
{
echo "** Trapped CTRL-C"
... (3 Replies)
Discussion started by: gilgamesh
3 Replies
LEARN ABOUT OPENDARWIN
pipe
PIPE(2) BSD System Calls Manual PIPE(2)NAME
pipe -- create descriptor pair for interprocess communication
SYNOPSIS
#include <unistd.h>
int
pipe(int *fildes);
DESCRIPTION
The pipe() function creates a pipe, which is an object allowing unidirectional data flow, and allocates a pair of file descriptors. The
first descriptor connects to the read end of the pipe, and the second connects to the write end, so that data written to fildes[1] appears on
(i.e., can be read from) fildes[0]. This allows the output of one program to be sent to another program: the source's standard output is set
up to be the write end of the pipe, and the sink's standard input is set up to be the read end of the pipe. The pipe itself persists until
all its associated descriptors are closed.
A pipe whose read or write end has been closed is considered widowed. Writing on such a pipe causes the writing process to receive a SIGPIPE
signal. Widowing a pipe is the only way to deliver end-of-file to a reader: after the reader consumes any buffered data, reading a widowed
pipe returns a zero count.
RETURN VALUES
On successful creation of the pipe, zero is returned. Otherwise, a value of -1 is returned and the variable errno set to indicate the error.
ERRORS
The pipe() call will fail if:
[EMFILE] Too many descriptors are active.
[ENFILE] The system file table is full.
[EFAULT] The fildes buffer is in an invalid area of the process's address space.
SEE ALSO sh(1), read(2), write(2), fork(2), socketpair(2)HISTORY
A pipe() function call appeared in Version 6 AT&T UNIX.
4th Berkeley Distribution June 4, 1993 4th Berkeley Distribution