From Paul Leclerc on Mon, 11 Oct 1999
First of thanks for your column. It's a great source of help for me.
Your recent question and answer in LG about X respawing, etc. may have another solution.
I was mucking around with my XF86Config file trying to get 16bpp to work. I really wasn't sure what I was doing and put various directives in different "sections" of the file.
One mistake that I made (and I don't remember what!!) caused the same problem, i.e. X respawning. I went back to the original file and everything was fixed.
Certainly having bad values in your XF86Config file can cause failure to load X. In general anything that prevents X Windows from loading cause a "respawning too fast" error from 'init' when running 'xdm' (or it's cousins, 'gdm', 'kdm' etc) from the /etc/inittab.
In fact, any program listed on a "respawn" line of /etc/inittab will cause this error message if it exits too quickly after loading (commonly the case when the program fails).
The message is from a feature of the 'init' program which attempts to prevent overwhelming the system with respawning activity.
So one must be sure that their 'getty' and other programs are properly configured before adding them to the inittab file. This can be a challenge with some programs (like the various forms of 'getty' that prompt your for a login name on your console and on any serial terminals or modems that you configure as login devices for your system). Some programs like 'getty' cannot normally be run from a shell prompt -- they must be started through 'init'.
One sort of program that is often difficult to run from 'init' is 'syslogd'. It is one of those programs that normally peforms a "double fork() and exec" as it loads. This is a programming technique for writing daemons such that they run disconnected from their parent process. The primary benefit is that it prevents "zombies." When the daemon dies or exits later, its return value will be automatically "reaped" (discarded) by 'init' (which adopts orphan processes for this purpose).
Basically some process must go through the process table periodically and read the exit values of "zombies." (a "zombie" is a dead process whose status is retained in the process table). This is normally the job of a process' parent. However, if the parent exits/dies before some of its children then 'init' takes on the job.
However, if you have one of these "double fork()-ing" daemons, and you try to run it directly from 'init' under a "respawn" directive, you'll get the "respawning too fast" error.
In the case of the Linux 'syslogd' (the system logging daemon) we can add a -n option to "not fork()." This would be done like so (/etc/inittab extract):
sl:2345:respawn:/sbin/syslogd -n -m 10
Here I've give this line an "ID" of "sl" (SysLog). I've marked it to run in levels 2 through 5 (1 is single-user repair mode, 0 is halt, and 6 is reboot). I've also set the "heartbeat" or "mark" interval to 10 minutes.
(The 'syslogd' "mark" option forces it to send a message at some interval even if nothing has been logged, it's used for automated monitoring in conjunction with remote logging. Read the syslog and syslog.conf man pages for details).
BTW: I think the option you might have been looking for in your XF86Config might have been:
... which has to go into the correct "Driver" section for your video card. The fact that XFree86 support multiple video card and monitor specifications inside of a single config file is an endless source of complication and confusion.