When bad things happen!

When bad things happen, like… ‘strace -f’ or ‘gdb’ or any other process inspection tool decides to hang your precious processes (they show up in state T in process lists), there’s always help:

#include <sys/ptrace.h>
#include <signal.h>
main(int ac, char **av) {
int pid; if (ac>1) pid=atoi(av[1]);
ptrace(PTRACE_ATTACH,pid,0,0);
ptrace(PTRACE_DETACH,pid,0,0);
kill(pid, SIGCONT); }
About these ads
This entry was posted in misc and tagged , . Bookmark the permalink.

3 Responses to When bad things happen!

  1. Eric Bergen says:

    There was an issue on rhel4 where if a tracing process didn’t call ptrace detach that the thread group leader would stay in traced state. If someone sent it a SIGCONT the thread group leader would continue and all the child threads would go into a traced state (T in ps). A second SIGCONT would bring it back to normal. Between the two signals a ps ax would show only the thread group leader status. Be sure to check the threads in ps to make sure none of them are in a traced state.

  2. Mark Callaghan says:

    A Perl/Python version of this would be easier to use.

  3. Mark, there’s no easy syscall/ptrace module either in perl nor python nor php. ‘make a’ works though :-)

Comments are closed.