----- Original Message -----
Now I could check for a parent pid of 1 each time in readmem(),
and kill it there, given readmem() is so regularly called, but
since you're seeing scenarios that don't show a readmem() in
the loop, that's not going to fly. Perhaps a better plan would
be to set up prctl(PR_SET_PDEATHSIG, SIGKILL) during initialization,
and hope there's no unwanted side effects.
Dave
The prctl() works for both a readmem() loop, and for repeating signal
loop I was able to force that is somewhat similar to your second
example.
Killing the network connection on the two scenarios showed this:
$ strace -p 18992
... [ cut ] ...
--- {si_signo=SIGTTOU, si_code=SI_KERNEL, si_value={int=1653142270, ptr=0x326288f2fe}}
(Stopped (tty output)) ---
--- Stopped (tty output) by SIGTTOU ---
ioctl(10, SNDCTL_TMR_START or SNDRV_TIMER_IOCTL_TREAD or TCSETS, {B38400 opost isig
-icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- {si_signo=SIGTTOU, si_code=SI_KERNEL, si_value={int=1653142270, ptr=0x326288f2fe}}
(Stopped (tty output)) ---
--- Stopped (tty output) by SIGTTOU ---
ioctl(10, SNDCTL_TMR_START or SNDRV_TIMER_IOCTL_TREAD or TCSETS, {B38400 opost isig
-icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
--- {si_signo=SIGTTOU, si_code=SI_KERNEL, si_value={int=1653142270, ptr=0x326288f2fe}}
(Stopped (tty output)) ---
--- Stopped (tty output) by SIGTTOU ---
ioctl(10, SNDCTL_TMR_START or SNDRV_TIMER_IOCTL_TREAD or TCSETS, {B38400 opost isig
-icanon -echo ...}) = ? ERESTARTSYS (To be restarted)
+++ killed by SIGKILL +++
$
$ strace -p 19607
... [ cut ] ...
lseek(3, 934634248, SEEK_SET) = 934634248
read(3, "\0@\2739\0\210\377\377", 8) = 8
lseek(3, 968508152, SEEK_SET) = 968508152
read(3, "\20H\0048\0\210\377\377", 8) = 8
lseek(3, 939739912, SEEK_SET) = 939739912
read(3, "\20`\2667\0\210\377\377", 8) = 8
lseek(3, 934634248, SEEK_SET) = 934634248
read(3, "\0@\2739\0\210\377\377", 8) = 8
+++ killed by SIGKILL +++
$
Seems like the way to go...
Dave