01-06-2009
Quote:
Originally Posted by
nicos
hello everybody!!
i want ur help! it is urgent!!
...
pid=fork();
if(pid==0)
{
execl(a program);
exit(1);}
else if (pid>0)
{
timer(5); //(command 1)timer is a function that count up to 5sec
if(kill(pid,0)==0)kill(pid,9);//(command 2)
wait(&status);
....
}
else
perror("error");
....
The purpose of command1 and command2 is, if the execution of child process
does not finish in 5sec(timer(5)), i want to kill it (kill(pid,9)).
Can anybody pleasee help why this thing does not work properly!!!
THANX in advance!:-)
It's because before calling wait() to wait child exits, the child won't actually disappear in the system, i.e. if a child exits, but the parent does not immediately call wait() or waitpid() to handle the SIGCHLD from its child process, the exited child process would keep as a zombie in the system, until the parent exits or the parent call wait() or waitpid(). And kill -SIGNAL to a zombie will always succeed, so kill() returns 0.
You can try the following code zombie.c:
Quote:
include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
pid_t pid;
pid=fork();
if(pid==0) {
printf("child process, sleep 5s and exit!");
sleep(5);
exit(0);
}
else if(pid>0) {
printf("parent process, sleep 10s, then kill and wait!");
sleep(10);
printf("parent process, kill!");
if(kill(pid, 0)==0) {
printf("child still alive!");
kill(pid, 9);
}
waitpid(pid, NULL);
exit(0);
}
}
you will see after 5s, child exits, and before parent kill it and wait it, by "pf -ef | grep zombie", a <defunct> process could be found.
10 More Discussions You Might Find Interesting
1. Programming
Hello,
I am working on Sun Solaris 5.7. I am trying to read the running time of a process through a C program.
One way I am reading it is by using the command ps -<pid> -f
The other way is from the struct psinfo_t which is there under /proc/pid/psinfo.
However, the two times are... (1 Reply)
Discussion started by: hmurali
1 Replies
2. UNIX for Dummies Questions & Answers
There is a process which is consuming too much time.. how to find that process and kill it. (3 Replies)
Discussion started by: shreenivas
3 Replies
3. Shell Programming and Scripting
hi all!
i want to run a process in certain date and hour (like feb 2007 ,hour 3 p.m)
how shell i write it
my script call cs-update-pr
another question :as the script running, will i see it as process ?ho does it run
background? and if not - how can i define to him to run background?
thanks... (3 Replies)
Discussion started by: naamas03
3 Replies
4. Shell Programming and Scripting
Hello guys,
Look what im doing:
I need to run a process from a SERVER1 to SERVER2, SERVER3 and SERVER4.
The shell of the process is in each SERVER (2 to 4)
So from SERVER1 i do:
for i in SERVER2 SERVER3 SERVER4
do
rsh $i '
./process.sh
'
done
The problem is: each process.sh... (2 Replies)
Discussion started by: lestat_ecuador
2 Replies
5. UNIX for Dummies Questions & Answers
Hi,
I need execute a script every 30 minutes. As might be done without using cron
Thx. (6 Replies)
Discussion started by: pepeli30
6 Replies
6. AIX
hi all
i need a script which will find all the processes witht the name of xxx and kill all those processes that runs for more than 1 day.
Regards (3 Replies)
Discussion started by: Elii
3 Replies
7. UNIX for Advanced & Expert Users
I would like to kill a process after a certain amount of time. Can I please get some ideas on how to do this? (9 Replies)
Discussion started by: cokedude
9 Replies
8. Shell Programming and Scripting
Good afternoon
I need to KILL a process in a single command sentence, for example:
kill -9 `ps -aef | grep 'CAL255.4ge' | grep -v grep | awk '{print $2}'`
That sentence Kills the process ID corresponding to the program CAL255.4ge.
However it is possible that the same program... (6 Replies)
Discussion started by: enriquegm82
6 Replies
9. Shell Programming and Scripting
Hi,
Do anybody experience to write a bash script in order to kill a specific process (java) after certain time of running?
eg.
java java.jar task_run.txt
I will run a java program (java.jar) which will run a long list of process (task_run.txt) one by one.
I plan to terminate the java... (5 Replies)
Discussion started by: perl_beginner
5 Replies
10. UNIX for Dummies Questions & Answers
I have many command is list in the variable lists,each command will run a very long time, so I want to run 5 commands at the same time with process till it complete run all the command,
lists="aa bb cc dd xx gg blabla zz ......." ( a very long list)
can some one point me the codes?
... (7 Replies)
Discussion started by: yanglei_fage
7 Replies
kill(2) System Calls Manual kill(2)
Name
kill - send signal to a process
Syntax
#include <sys/types.h>
#include <signal.h>
kill(pid, sig)
pid_t pid;
int sig;
Description
The system call sends the signal sig to a process specified by the process number pid. The sig can be a signal specified in a call or it
can be 0. If the sig is 0, error checking is performed, but a signal is not sent. This call can be used to check the validity of pid.
The sending and receiving processes must have the same effective user ID, otherwise this call is restricted to the superuser with the
exception of the signal SIGCONT. The signal SIGCONT can always be sent to a child or grandchild of the current process.
If the process number is 0, the signal is sent to all other processes in the sender's process group.
If the process number is negative but not -1, the signal is sent to all processes whose process-group-id is equal to the absolute value of
the process number.
The above two options are variants of
If the process number is -1, and the user is the superuser, the signal is broadcast for all processes except to system processes and the
process sending the signal.
Processes may send signals to themselves.
Environment
System Five
POSIX
When your program is compiled in the System V or POSIX environment, a signal is sent if either the real or effective uid of the sending
process matches the real or saved-set-uid (as described in ) of the receiving process. In addition, any process can use a pid of -1, and
the signal is sent to all processes subject to these permission checks.
In POSIX mode, the pid argument is of type pid_t.
Return Values
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned, and is set to indicate the error.
Diagnostics
The system call fails under the following conditions:
[EINVAL] The sig is not a valid signal number.
[EPERM] The sending process is not the superuser, and its effective user ID does not match the effective user ID of the receiving
process.
[ESRCH] No process can be found corresponding to that specified by pid.
See Also
execve(2), getpgrp(2), getpid(2), killpg(2), sigvec(2), pause(3)
kill(2)