Alexander Burger <a...@software-lab.de> writes:

Hi Alex,

>> is it "normal" that a simple 'kill' won't kill PicoLisp processes, only
>> with option 'KILL it works?
>
> No.
>
> A "normal" kill with SIGTERM (i.e. -15) should work.
>
> SIGKILL (i.e. -9) should be used only in extreme emergencies, because it
> may cause the loss of data (resulting in a corrupted database in the
> worst case)!
>
>
> Usually a
>
>    $ killall picolisp
>
> or
>
>    $ killall pil
>
> should do.
>
>
> It should be noted, however, that PicoLisp catches some signals:
>
>    1. SIGPIPE, SIGTTIN and SIGTTOU are ignored.
>
>    2. SIGIO is caught and handled in the 'sigio' function handler.
>
>    3. SIGHUP is caught and handled in the '*Hup' global.
>
>    4. SIGUSR1 and SIGUSR2 are handled in the '*Sig1' and '*Sig2'
>       globals.
>
>    5. SIGALRM is used for the 'alarm' and 'abort' functions.
>
>    6. SIGCHLD is handled internally for the management of child
>       processes.
>
>    7. SIGINT is caught only in the REPL, and causes a console break. A
>       process running without a REPL is terminated.
>
>    8. SIGTSTP is used in the REPL to suspend the forground PicoLisp
>       process.
>
>
> The "normal" (default) signal SIGTERM causes the termination of the
> running PicoLisp process with 'bye'.
>
> BUT:
>    1. If that process has still running child processes, it sends
>       SIGTERM recursively to all children first, and waits for them to
>       terminate. Then it terminates itself.
>
>    2. During certain phases of program execution, the PicoLisp
>       interpreter blocks this and/or other signals. This may be in a
>       'protect'ed code block, or during critical database operations.
>       This will only delay the handing of those interrupts (not ignore
>       them).
>
> I hope I didn't forget anything :)

Guess not, that reads like an exhaustive treatment ;)
Thanks for the info. 

I ran into this problem when experimenting with the web-framework and my
app got into a bad state. When restarting then, PicoLisp tells me
something like 'Port is already used', so I tried to kill the still
running (*) PicoLisp processes with a simple 'kill PID', but to no
avail.

[* are they still running? 'ps' shows them with a '?', and I
shutted them down on the command-line, so they shouldn't. But somehow
they still block the port, and the more I shut down, the more are shown
by 'ps']

May that be because things went wrong during debugging when some
database operation failed? I have no idea ...

-- 
cheers,
Thorsten

-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to