[ale] SIGHUP ignored after exec

Chris Fowler cfowler at outpostsentinel.com
Mon Mar 25 14:37:38 EST 2002


Hello,

I have an issue where I use SIGHUP to reintialize a program.  The way I do this is just have the program exec itself.  The exec works but it appears that
all attempts to send SIGHUP to the new program fail.  It is ignoring those signals.  Below is strace output and I also have attached test  
code.  I may be using my syscalls incorreclty.  Having a program reexec itself is easier than re-reading configuration.



 strace -f ./sigtest
execve("./sigtest", ["./sigtest"], [/* 27 vars */]) = 0
uname({sys="Linux", node="moses.outpostsentinel.com", ...}) = 0
brk(0)                                  = 0x8049740
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=59927, ...}) = 0
old_mmap(NULL, 59927, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40017000
close(3)                                = 0
open("/lib/i686/libc.so.6", O_RDONLY)   = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 \306\1"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=5772268, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40026000
old_mmap(NULL, 1290088, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40027000
mprotect(0x40159000, 36712, PROT_NONE)  = 0
old_mmap(0x40159000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x131000) = 0x40159000
old_mmap(0x4015e000, 16232, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4015e000
close(3)                                = 0
munmap(0x40017000, 59927)               = 0
write(1, "Hello\n", 6Hello
)                  = 6
rt_sigaction(SIGHUP, {0x8048500, [HUP], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
pause()                                 = ? ERESTARTNOHAND (To be restarted)
--- SIGHUP (Hangup) ---
rt_sigaction(SIGHUP, {0x8048500, [HUP], SA_RESTART|0x4000000}, {0x8048500, [HUP], SA_RESTART|0x4000000}, 8) = 0
write(1, "EXECing\n", 8EXECing
)                = 8
execve("./sigtest", ["./sigtest"], [/* 27 vars */]) = 0
uname({sys="Linux", node="moses.outpostsentinel.com", ...}) = 0
brk(0)                                  = 0x8049740
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=59927, ...}) = 0
old_mmap(NULL, 59927, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40017000
close(3)                                = 0
open("/lib/i686/libc.so.6", O_RDONLY)   = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 \306\1"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=5772268, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40026000
old_mmap(NULL, 1290088, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40027000
mprotect(0x40159000, 36712, PROT_NONE)  = 0
old_mmap(0x40159000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x131000) = 0x40159000
old_mmap(0x4015e000, 16232, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4015e000
close(3)                                = 0
munmap(0x40017000, 59927)               = 0
write(1, "Hello\n", 6Hello
)                  = 6
rt_sigaction(SIGHUP, {0x8048500, [HUP], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
pause(

The pause above will not awak with a kill -1

test code below:


#include <signal.h>


char **program;

void
sigCatcher(int signum)
{
        if(signum == SIGHUP)
        {
                signal(SIGHUP, sigCatcher);
                write(1, "EXECing\n", 8);
                execv(program[0], program);
        }

        return;
}


int
main(int argc, char *argv[])
{

        write(1, "Hello\n", 6);
        signal(SIGHUP, sigCatcher);

        program = argv;


        pause();

        return 0;
}





---
This message has been sent through the ALE general discussion list.
See http://www.ale.org/mailing-lists.shtml for more info. Problems should be 
sent to listmaster at ale dot org.






More information about the Ale mailing list