#include #include #include #include #include #include #include int main(int argc, char *argv[]) { int child,rc,status; child = fork(); if (0 == child) { fprintf(stderr,"[child] ptrace me ...\n"); ptrace(PTRACE_TRACEME); fprintf(stderr,"[child] exec sleep 10 ...\n"); execlp("sleep", "sleep", "10", NULL); perror("execlp"); exit(1); } sleep(1); fprintf(stderr,"kill %d,STOP ...\n",child); kill(child,SIGSTOP); fprintf(stderr,"waitpid %d...\n",child); rc = waitpid(child,&status,WUNTRACED); fprintf(stderr,"%s: rc=%d status=%s%s%s termsig=%d\n",__FUNCTION__,rc, WIFEXITED(status) ? "exit" : "", WIFSIGNALED(status) ? "signal" : "", WIFSTOPPED(status) ? "stopped" : "", WTERMSIG(status)); sleep(1); fprintf(stderr,"kill %d,KILL ...\n",child); kill(child,SIGKILL); fprintf(stderr,"waitpid %d...\n",child); rc = waitpid(child,&status,WUNTRACED); fprintf(stderr,"%s: rc=%d status=%s%s%s termsig=%d\n",__FUNCTION__,rc, WIFEXITED(status) ? "exit" : "", WIFSIGNALED(status) ? "signal" : "", WIFSTOPPED(status) ? "stopped" : "", WTERMSIG(status)); exit(0); }