if I use signal() or sigaction() to install a signal handler for SIGSEGV or other signals, is it safe to call popen() from inside the handler? it returns a FILE* so I'm guessing that it's a library function that calls pipe(), fdopen(), fork(), dup(), and exec*() on the back end, which are all legal calls inside a signal handler, so I'm guessing that it's ok. I am spawning the external program addr2line on a series of addresses obtained by calling backtrace(), and it appears to work fine, but I just want to make sure I'm not treading on undefined behavior territory.