warn("%s", "Try again later");
warn("Try again later");
shell(argc, argv)	int argc;	char *argv[];{	pid_t pid;	sig_t old1, old2;	char shellnam[MAXPATHLEN], *shell, *namep;	union wait status;	old1 = signal (SIGINT, SIG_IGN);	old2 = signal (SIGQUIT, SIG_IGN);	if ((pid = fork()) == 0) {		for (pid = 3; pid < 20; pid++)			(void)close(pid);		(void)signal(SIGINT, SIG_DFL);		(void)signal(SIGQUIT, SIG_DFL);		shell = getenv("SHELL");		if (shell == NULL)			shell = _PATH_BSHELL;		namep = strrchr(shell, '/');		if (namep == NULL)			namep = shell;		shellnam[0] = '-';		(void)strncpy(shellnam + 1, ++namep, sizeof(shellnam) - 2);		shellnam[sizeof(shellnam) - 1] = '\0';		if (strcmp(namep, "sh") != 0)			shellnam[0] = '+';		if (debug) {			puts(shell);			(void)fflush(stdout);		}		if (argc > 1) {			execl(shell, shellnam, "-c", altarg, (char *)0);		}		else {			execl(shell, shellnam, (char *)0);		}		warn("%s", shell);		code = -1;		exit(1);	}	if (pid > 0)		while (wait((int *)&status) != pid)			;	(void)signal(SIGINT, old1);	(void)signal(SIGQUIT, old2);	if (pid == -1) {		warn("%s", "Try again later");		code = -1;	}	else {		code = 0;	}}