summaryrefslogtreecommitdiff
path: root/stopped_exec.c
blob: 2d3ad840e6b62daccbe7a6d248ccf2a306516ee6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

static char const msg_usage[] = "Usage: %s <command> [args]\nExecutes a program in stopped state.\n";

static
int usage(char const* cmd)
{
	fprintf(stderr, msg_usage, cmd);
	return 1;
}

int main(int argc, char *argv[])
{
	if( 2 > argc ){
		return usage(argv[0]);
	}
	pid_t const fork_rc = fork();
	if( 0 == fork_rc ){
		setsid();
		kill( 0, SIGSTOP );
		execvp(argv[1], argv+1);
		perror("execvp");
		return 2;
	}
	if( 0 > fork_rc ){
		perror("fork");
		return 3;
	}
	fprintf(stderr, "%ld\n", (long)fork_rc);
	return 0;
}