Use vfork() instead of fork() before exec()

If running on older Linux systems, or any BSD UNIX, vfork()
is more efficient when we are about to call exec() anyway.

For more info on vfork() vs fork(), see Stack Exchange:
http://stackoverflow.com/questions/4259629/what-is-the-difference-between-fork-and-vfork

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson
2015-01-06 23:38:47 +01:00
parent d40f52357e
commit 074686b520
2 changed files with 5 additions and 5 deletions
+4 -4
View File
@@ -446,7 +446,7 @@ int run(char *cmd)
return 1;
}
pid = fork();
pid = vfork();
if (0 == pid) {
int i;
FILE *fp;
@@ -563,7 +563,7 @@ int run_interactive(char *cmd, char *fmt, ...)
pid_t run_getty(char *cmd, char *args[], int console)
{
pid_t pid = fork();
pid_t pid = vfork();
if (!pid) {
int i, fd;
@@ -629,7 +629,7 @@ pid_t run_getty(char *cmd, char *args[], int console)
int run_parts(char *dir, char *cmd)
{
struct dirent **e;
int i, num;
volatile int i, num;
num = scandir(dir, &e, NULL, alphasort);
if (num < 0) {
@@ -669,7 +669,7 @@ int run_parts(char *dir, char *cmd)
}
args[j++] = NULL;
pid = fork();
pid = vfork();
if (!pid) {
_d("Calling %s ...", path);
execv(path, args);
+1 -1
View File
@@ -458,7 +458,7 @@ int svc_start(svc_t *svc)
sigaddset(&nmask, SIGCHLD);
sigprocmask(SIG_BLOCK, &nmask, &omask);
pid = fork();
pid = vfork();
sigprocmask(SIG_SETMASK, &omask, NULL);
if (pid == 0) {
int i = 0;