34 lines
571 B
C
34 lines
571 B
C
#include <stdio.h>
|
|
#include <signal.h>
|
|
#include <sys/procfs.h>
|
|
#include <sys/stropts.h>
|
|
#include <poll.h>
|
|
main()
|
|
{
|
|
int pid;
|
|
char proc[32];
|
|
FILE *pfp;
|
|
struct pollfd pfd;
|
|
|
|
if ((pid = fork()) == 0) {
|
|
pause();
|
|
exit(0);
|
|
}
|
|
sprintf(proc, "/proc/%d", pid);
|
|
if ((pfp = fopen(proc, "r+")) == NULL)
|
|
goto fail;
|
|
if (ioctl(fileno(pfp), PIOCSTOP, NULL) < 0)
|
|
goto fail;
|
|
pfd.fd = fileno(pfp);
|
|
pfd.events = POLLPRI;
|
|
if (poll(&pfd, 1, 0) < 0)
|
|
goto fail;
|
|
if (!(pfd.revents & POLLPRI))
|
|
goto fail;
|
|
kill(pid, SIGKILL);
|
|
exit(0);
|
|
fail:
|
|
kill(pid, SIGKILL);
|
|
exit(1);
|
|
}
|