Beispiel #1
0
int
main(int argc, char** argv)
{
	const char* command = "list";
	bool verbose = false;

	int c;
	while ((c = getopt_long(argc, argv, "+hv", kLongOptions, NULL)) != -1) {
		switch (c) {
			case 0:
				break;
			case 'h':
				usage(0);
				break;
			case 'v':
				verbose = true;
				break;
			default:
				usage(1);
				break;
		}
	}

	if (argc - optind >= 1)
		command = argv[optind];

	if (strcmp(command, "list") == 0) {
		list_jobs(verbose);
	} else if (strcmp(command, "list-targets") == 0) {
		list_targets(verbose);
	} else if (strcmp(command, "log") == 0) {
		get_log(argc - optind, &argv[optind]);
	} else if (argc == optind + 1) {
		// For convenience (the "info" command can be omitted)
		get_info(command);
	} else {
		// All commands that need a name following

		const char* name = argv[argc - 1];

		if (strcmp(command, "info") == 0) {
			get_info(name);
		} else if (strcmp(command, "start") == 0) {
			start_job(name);
		} else if (strcmp(command, "stop") == 0) {
			stop_job(name);
		} else if (strcmp(command, "restart") == 0) {
			restart_job(name);
		} else if (strcmp(command, "enable") == 0) {
			enable_job(name, true);
		} else if (strcmp(command, "disable") == 0) {
			enable_job(name, false);
		} else {
			fprintf(stderr, "%s: Unknown command \"%s\".\n", kProgramName,
				command);
		}
	}
	return 0;
}
Beispiel #2
0
void frontground(char **argv) {
	pid_t pid = 0;

	if (pid = fbg_argv_to_pid(argv)) {
		child_block();
		restart_job(pid);
		forepid = pid;
		child_unblock();
		fg_waitpid(pid);
	}
	else
		fprintf(stderr, "usage: fg <%%jid> or fg <pid>\n");
	return;
}
Beispiel #3
0
void front_or_back(char **argv, int fg_or_not) {
	int jid = 0;
	int fg_run = fg_or_not;
	pid_t pid = 0;
	pid_t j2pid = 0;

	if (fbg_argv_ok(argv, &pid, &jid)) {
		if (pid) {
			if (selectjob(pid)) {
				child_block();
				restart_job(pid);
				if (fg_run) {
					forepid = pid;
					setpgid(pid, shellpid);
					child_unblock();
					printf("bg ready to fg\n");
					while (1) 
						sleep(50);
					printf("u never see me\n");
					return;
				}
				else {
					child_unblock();
					return;
				}
			}
			else {
				fprintf(stderr, "%d: No such process\n", pid);
				return;
			}
		}
		else {   
			j2pid = j2p(jid);
			if (selectjob(j2pid)) {
				child_block();
				restart_job(j2pid);
				if (fg_run) {
					forepid = j2pid;
					setpgid(j2pid, shellpid);
					child_unblock();
					printf("bg ready to fg\n");
					while (1)
						sleep(50);
					printf("u never see me\n");
					return;
				}
				else {
					child_unblock();
					return;
				}
			}
			else {
				fprintf(stderr, "%d: No such process\n", j2p(jid));
				return;
			}
		}
	}
	else
		fprintf(stderr, "usage: %s <%%jid> or %s <pid>\n",
				argv[0], argv[0]);
	return;
}