int DoAllSignals(EvalContext *ctx, Item *siglist, Attributes a, const Promise *pp, PromiseResult *result) { Item *ip; Rlist *rp; pid_t pid; int killed = false; if (siglist == NULL) { return 0; } if (a.signals == NULL) { Log(LOG_LEVEL_VERBOSE, "No signals to send for '%s'", pp->promiser); return 0; } for (ip = siglist; ip != NULL; ip = ip->next) { pid = ip->counter; for (rp = a.signals; rp != NULL; rp = rp->next) { int signal = SignalFromString(RlistScalarValue(rp)); if (!DONTDO) { if ((signal == SIGKILL) || (signal == SIGTERM)) { killed = true; } if (kill((pid_t) pid, signal) < 0) { cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_FAIL, pp, a, "Couldn't send promised signal '%s' (%d) to pid %jd (might be dead). (kill: %s)", RlistScalarValue(rp), signal, (intmax_t)pid, GetErrorStr()); *result = PromiseResultUpdate(*result, PROMISE_RESULT_FAIL); } else { cfPS(ctx, LOG_LEVEL_INFO, PROMISE_RESULT_CHANGE, pp, a, "Signalled '%s' (%d) to process %jd (%s)", RlistScalarValue(rp), signal, (intmax_t)pid, ip->name); *result = PromiseResultUpdate(*result, PROMISE_RESULT_CHANGE); } } else { Log(LOG_LEVEL_ERR, "Need to keep signal promise '%s' in process entry '%s'", RlistScalarValue(rp), ip->name); } } } return killed; }
static int DoAllSignals(Item *siglist, Attributes a, Promise *pp) { Item *ip; Rlist *rp; pid_t pid; int killed = false; CfDebug("DoSignals(%s)\n", pp->promiser); if (siglist == NULL) { return 0; } if (a.signals == NULL) { CfOut(OUTPUT_LEVEL_VERBOSE, "", " -> No signals to send for %s\n", pp->promiser); return 0; } for (ip = siglist; ip != NULL; ip = ip->next) { pid = ip->counter; for (rp = a.signals; rp != NULL; rp = rp->next) { int signal = SignalFromString(rp->item); if (!DONTDO) { if ((signal == SIGKILL) || (signal == SIGTERM)) { killed = true; } if (kill((pid_t) pid, signal) < 0) { cfPS(OUTPUT_LEVEL_VERBOSE, CF_FAIL, "kill", pp, a, " !! Couldn't send promised signal \'%s\' (%d) to pid %jd (might be dead)\n", RlistScalarValue(rp), signal, (intmax_t)pid); } else { cfPS(OUTPUT_LEVEL_INFORM, CF_CHG, "", pp, a, " -> Signalled '%s' (%d) to process %jd (%s)\n", RlistScalarValue(rp), signal, (intmax_t)pid, ip->name); } } else { CfOut(OUTPUT_LEVEL_ERROR, "", " -> Need to keep signal promise \'%s\' in process entry %s", RlistScalarValue(rp), ip->name); } } } return killed; }