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; }
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; }
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; }