Unix 'sleep' clone - unsure of safety
An error message ("too few"/"too many") is not helpful. Typically when an Unix utility cannot deal with the command line it prints what it expects:

For example,

fprintf(stderr, " Usage: %s sleep_duration", argv[0])


It is also customary to provide a usage() function to print such message.

In any case, do not hardcode a sleep string. Use argv[0].
strtoul has very good error handling capabilities. It is pointless to try to intercept problems it can detect.

Just let it do its job:

char * stop;
unsigned long int time = strtoul(argv[1], &amp;stop, 10);
if (*stop != 0) {
    // strtoul failed to parse the argument. Now printing an error message is appropriate.
    usage("...");
}

It would be nice to add an option to define a SIGALRM behaviour. OpenGroup does not specify which action shall be taken, meaning it is up to you to define it.