static void _list_pids_all_steps(const char *node_name, uint32_t jobid) { List steps; ListIterator itr; step_loc_t *stepd; int count = 0; steps = stepd_available(NULL, node_name); if (!steps || list_count(steps) == 0) { fprintf(stderr, "Job %u does not exist on this node.\n", jobid); if (steps) list_destroy(steps); exit_code = 1; return; } itr = list_iterator_create(steps); while((stepd = list_next(itr))) { if (jobid == stepd->jobid) { _list_pids_one_step(stepd->nodename, stepd->jobid, stepd->stepid); count++; } } list_iterator_destroy(itr); list_destroy(steps); if (count == 0) { fprintf(stderr, "Job %u does not exist on this node.\n", jobid); exit_code = 1; } }
static void _list_pids_all_jobs(const char *node_name) { List steps; ListIterator itr; step_loc_t *stepd; steps = stepd_available(NULL, node_name); if (!steps || list_count(steps) == 0) { fprintf(stderr, "No job steps exist on this node.\n"); FREE_NULL_LIST(steps); exit_code = 1; return; } itr = list_iterator_create(steps); while((stepd = list_next(itr))) { _list_pids_one_step(stepd->nodename, stepd->jobid, stepd->stepid); } list_iterator_destroy(itr); FREE_NULL_LIST(steps); }
/* * scontrol_list_pids - given a slurmd job ID or job ID + step ID, * print the process IDs of the processes each job step (or * just the specified step ID). * IN jobid_str - string representing a jobid: jobid[.stepid] * IN node_name - May be NULL, in which case it will attempt to * determine the NodeName of the local host on its own. * This is mostly of use when multiple-slurmd support is in use, * because if NULL is used when there are multiple slurmd on the * node, one of them will be selected more-or-less at random. */ extern void scontrol_list_pids(const char *jobid_str, const char *node_name) { uint32_t jobid = 0, stepid = 0; /* Job ID is optional */ if (jobid_str != NULL && jobid_str[0] != '*' && !_parse_jobid(jobid_str, &jobid)) { exit_code = 1; return; } /* Step ID is optional */ printf("%-8s %-8s %-6s %-7s %-8s\n", "PID", "JOBID", "STEPID", "LOCALID", "GLOBALID"); if (jobid_str == NULL || jobid_str[0] == '*') { _list_pids_all_jobs(node_name); } else if (_parse_stepid(jobid_str, &stepid)) { _list_pids_one_step(node_name, jobid, stepid); } else { _list_pids_all_steps(node_name, jobid); } }