The child thread was created because execlp will not return if successful.
The eprintf was placed after the call to execlp to catch any error, but the
child continued to return a (closed) fds[0], resulting in a second slideshow
being run by the child.
This commit fixes the issue by killing the child.
close(fds[0]);
close(fds[1]);
execlp("sh", "sh", "-c", cmd, (char *)0);
- eprintf("execlp sh -c '%s':", cmd);
+ die("execlp sh -c '%s':", cmd);
}
close(fds[1]);
return fds[0];