Exemplo n.º 1
0
void doit() {
	if (efork() == 0) {
		efork();
		printf("hello\n");
		exit(0);
	}
	return;
}
Exemplo n.º 2
0
int main() {
	if (efork() == 0)
		atexit(end);
	if (efork() == 0) {
		printf("0");
		fflush(stdout);
	}
	else
		printf("1");
		fflush(stdout);
	exit(0);
}
Exemplo n.º 3
0
Arquivo: main.c Projeto: npe9/harvey
int
_schedexec(Execargs *e)
{
	int pid;

	switch(pid = rfork(RFREND|RFNOTEG|RFFDG|RFMEM|RFPROC)){
	case 0:
		efork(e);
	default:
		return pid;
	}
}
Exemplo n.º 4
0
void eval(char *cmdline) {	
	char buf[MAXLINE];
	char *argv[MAXARGS];
	int bg, b;
	pid_t pid;

	strcpy(buf, cmdline);
	bg = parseline(buf, argv);
	if (argv[0] == NULL)
		return;
	if (b = builtin_cmd(argv)) 
		return;
	else {
		child_block();

		if ((pid = efork()) == 0) {
			signal(SIGINT, SIG_DFL);
			signal(SIGTSTP, SIG_DFL);
			signal(SIGCHLD, SIG_DFL);
			signal(SIGALRM, SIG_DFL);
			child_unblock();
			if (execve(argv[0], argv, environ) < 0) {		
				printf("%s : Command not found.\n", 
					argv[0]);
				exit(0);
			}
		}
		addjob(pid, cmdline);
		setpgid(pid, pid);
		if (bg) {
			bg_job_info(pid);
			child_unblock();
			return;
		}
		if (!bg) {
			forepid = pid;
			child_unblock();
			fg_waitpid(pid);
			return;
		}
		child_unblock();
	}
	return;
}
Exemplo n.º 5
0
/* forkexec -- fork (if necessary) and exec */
extern List *forkexec(char *file, List *list, Boolean inchild) {
	int pid, status;
	Vector *env;
	gcdisable();
	env = mkenv();
	pid = efork(!inchild, FALSE);
	if (pid == 0) {
		execve(file, vectorize(list)->vector, env->vector);
		failexec(file, list);
	}
	gcenable();
	status = ewaitfor(pid);
	if ((status & 0xff) == 0) {
		sigint_newline = FALSE;
		SIGCHK();
		sigint_newline = TRUE;
	} else
		SIGCHK();
	printstatus(0, status);
	return mklist(mkterm(mkstatus(status), NULL), NULL);
}