/* dwm will keep pid's of processes from autostart array and kill them at quit */ static pid_t *autostart_pids; static size_t autostart_len; /* execute command from autostart array */ static void autostart_exec() { const char *const *p; size_t i = 0; /* count entries */ for (p = autostart; *p; autostart_len++, p++) while (*++p); autostart_pids = malloc(autostart_len * sizeof(pid_t)); for (p = autostart; *p; i++, p++) { if ((autostart_pids[i] = fork()) == 0) { setsid(); execvp(*p, (char *const *)p); fprintf(stderr, "dwm: execvp %s\n", *p); perror(" failed"); _exit(EXIT_FAILURE); } /* skip arguments */ while (*++p); } }