02-24-2008
Why on Earth would anyone want a zombie to persist like this? The zombie's only purpose is perserve the exit code of the process so that the parent can obtain it. Once the parent is dead, there is no purpose left for the zombie. If you disable the reaping of zombies on a systemwide basis, the process table will fill and you will be unable to fork new processes. If that is your goal, you can easily fill the process table with living processes rather than zombies. Just write a "while(1) fork();" program and run it as root. Fair warning: it will be rather hard to recover from that and you may need to cycle power to the system. If you must fill the process table with zombies you will need to rewrite init to not reap zombies. There will be no way to recover from that. You will need to recycle power each time the process table fills. If you modify init to not reap only a few certain zombies, you will be able to use the system for a longer period before the process table fills.
I would really like to hear an explanation as why someone wants unreapable zombies. Is any benefit expected from an unreapable zombie?
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
I'm having trouble with Abnormal Termination errors. What are they, what causes them and how can I prevent them from happening? Are they application specific? (2 Replies)
Discussion started by: bialsibub
2 Replies
2. UNIX for Dummies Questions & Answers
When you run a ps -ef and if the status is a Z (zombie) does that mean the same as not responding? (Like a windows machine).
Also has anyone here heard of the program called 'top' (I've found it on our Solaris 7 machines) If you have you might be able to help me. I need to know if there is a... (8 Replies)
Discussion started by: merlin
8 Replies
3. Shell Programming and Scripting
Is there a way I can run a command that will run in the kernel or in the memory and automatically kill certain scripts if they get to <defunct> processes, without having to be monitoring the server manually?
I have a Perl script which runs for 20k members and normally does not have any problems,... (2 Replies)
Discussion started by: ukndoit
2 Replies
4. Red Hat
Hey,
I've got a program that fork's a list of child processes, and keeps their pid's in a list.
After the parent finishes it's main business logic, it needs to check which child already finished - and when.
Is it possible - using waitpid or any other func\syscall - get this information... (0 Replies)
Discussion started by: sternr
0 Replies
5. Shell Programming and Scripting
hi all,
i have a situation where i run ssh command from a unix machine to execute few scripts on 2 other unix machines.
my problem is, the scripts that i run will start few commands on the 2 servers and will quit....i am able to quit from the script but i have to give ctrl+c (on the... (10 Replies)
Discussion started by: niteesh_!7
10 Replies
6. Shell Programming and Scripting
Hi, I am making a program that needs to detect if the program name in parameter is a valid runable program.
But the line if ; then never seem to work.
Even if I run like:
./script cat "-u" cat "-u" inputfile
Thank you everyone.
#!/bin/bash
#
usage() { #print usage message and quit... (4 Replies)
Discussion started by: leonmerc
4 Replies
7. Shell Programming and Scripting
I am trying to understand a program in a book and this program suppose to call other programs which are in the same folder, the other programs are called 'lu' and 'add' but for some reason when it gets to the last line of each case to call these programs there is an error message saying
./rolo:... (2 Replies)
Discussion started by: bartsimpsong
2 Replies
8. AIX
I have two shared libraries, A, B(B depents on A, both linked with -G option which means they're rtl enable), B's toc size is bigger than 64K(-bbigtoc), while A's toc size smaller than 64K.
Then I write a "Hello, world" example E, and link with A and B.
Link cmd 1:
xlC128_r -o E E.o -lA -lB... (0 Replies)
Discussion started by: jackliang
0 Replies
9. AIX
Hello All,
I am trying to call a function from the calling main program from a dlopened library function, below is the entire code, when I execute it it crashes with sigill. Can you guys help me out I guess I am missing out on the linker flag or something here. besides I am new to AIX and... (1 Reply)
Discussion started by: syedtoah
1 Replies
10. UNIX for Advanced & Expert Users
I am having trouble running jgrasp. I get the message above when I try to run jgrasp. I am running fedora if that makes a difference.
I have already set my environmental variable with this. Hopefully I did it right.
JGRASP_HOME=/opt/jgrasp
export... (0 Replies)
Discussion started by: cokedude
0 Replies
LEARN ABOUT OSF1
pthread_atfork
pthread_atfork(3) Library Functions Manual pthread_atfork(3)
NAME
pthread_atfork - Declares fork handler routines to be called when the calling thread's process forks a child process.
LIBRARY
Standard C Library (libc.so, libc.a)
SYNOPSIS
#include <pthread.h>
int pthread_atfork(
void (*prepare)(void),
void (*parent)(void),
void (*child)(void));
STANDARDS
Interfaces documented on this reference page conform to industry standards as follows:
IEEE Std 1003.1c-1995, POSIX System Application Program Interface
PARAMETERS
Address of a routine that performs the fork preparation handling. This routine is called in the parent process before creating the child
process. Address of a routine that performs the fork parent handling. This routine is called in the parent process after creating the
child process and before returning to the caller of fork(2). Address of a routine that performs the fork child handling. This routine is
called in the child process before returning to the caller of fork(2).
DESCRIPTION
This routine allows a main program or library to control resources during a fork(2) operation by declaring fork handler routines, as fol-
lows: The fork handler routine specified in the prepare argument is called before fork(2) executes. The fork handler routine specified in
the parent argument is called after fork(2) executes within the parent process. The fork handler routine specified in the child argument
is called in the new child process after fork(2) executes. Your program (or library) can use fork handlers to ensure that program context
in the child process is consistent and meaningful. After fork(2) executes, only the calling thread exists in the child process, and the
state of all memory in the parent process is replicated in the child process, including the states of any mutexes, condition variables, and
so on.
For example, in the new child process there might exist locked mutexes that are copies of mutexes that were locked in the parent process by
threads that do not exist in the child process. Therefore, any associated program state might be inconsistent in the child process.
The program can avoid this problem by calling pthread_atfork to provide routines that acquire and release resources that are critical to
the child process. For example, the prepare handler should lock all mutexes that you want to be usable in the child process. The parent
handler just unlocks those mutexes. The child handler will also unlock them all--and might also create threads or reset any program state
for the child process.
If no fork handling is desired, you can set any of this routine's arguments to NULL.
NOTES
It is not legal to call pthread_atfork from within a fork handler routine. Doing so could cause a deadlock.
EXAMPLES
For example, if your library uses a mutex my_mutex, you might provide pthread_atfork handler routines coded as follows:
void my_prepare(void)
{
pthread_mutex_lock(&my_mutex);
}
void my_parent(void)
{
pthread_mutex_unlock(&my_mutex);
}
void my_child(void)
{
pthread_mutex_unlock(&my_mutex);
/* Reinitialize state that doesn't apply...like heap owned */
/* by other threads */
}
{
.
.
.
pthread_atfork(my_prepare, my_parent, my_child);
.
.
fork();
}
RETURN VALUES
If an error condition occurs, this routine returns an integer value indicating the type of error. Possible return values are as follows:
Successful completion Insufficient table space exists to record the fork handler routines' addresses.
ERRORS
None
RELATED INFORMATION
Functions: pthread_create(3)
Manuals: Guide to DECthreads, Programmer's Guide
delim off
pthread_atfork(3)