logout
Geoff Clare
gwc at root.co.uk
Fri Feb 8 02:03:38 AEST 1991
[I have cross-posted to comp.unix.questions and directed followups there
as this topic is UNIX specific, and not appropriate for comp.lang.c]
In article <+W9+Y=A at irie.ais.org> garath at ais.org (Belgarath) writes:
>
> Hi. I've created a generic menu program for new users on our system.
>I have everything working now except for a logout option. Is there a way to
>have to program kill all processes/jobs and then log the user out or do they
>need to quit the program and then exit?
> Please respond via e-mail. Thanks.
>P.S. How could I have had this expire in, say 10 days? I don't see expire at
>the top as one of the options I could fill in.
In <665707935 at romeo.cs.duke.edu> drh at duke.cs.duke.edu (D. Richard Hipp) writes:
[stuff deleted]
>I`ve never tried it, but according to my man-pages, the following should
>do a more complete job of killing everyone off:
> killpg(getpgrp(0),9)
This works, but killpg() is not very portable. On all UNIX systems I'm
familiar with, the same effect can be obtained by using kill() with a
process ID of 0. Also, signal 9 (SIGKILL) is not a good choice of
signal, because it cannot be caught and so the processes will not be
able to clean up. As a rule SIGKILL should only be used as a last
resort to kill processes that otherwise refuse to die. In the case
under discussion (simulating a logout), the appropriate signal is
SIGHUP, which is what the processes would receive when a user logs off
leaving background jobs running.
So the best solution is
kill(0, SIGHUP);
or from a shell
kill -1 0
If you want to kill processes which have been run with "nohup", use
SIGKILL instead of SIGHUP.
--
Geoff Clare <gwc at root.co.uk> (Dumb American mailers: ...!uunet!root.co.uk!gwc)
UniSoft Limited, London, England. Tel: +44 71 729 3773 Fax: +44 71 729 3273
More information about the Comp.lang.c
mailing list