ashb commented on code in PR #44465: URL: https://github.com/apache/airflow/pull/44465#discussion_r1862732883
########## task_sdk/src/airflow/sdk/execution_time/supervisor.py: ########## @@ -391,12 +391,55 @@ def _send_startup_message(self, ti: TaskInstance, path: str | os.PathLike[str], self.stdin.write(msg.model_dump_json().encode()) self.stdin.write(b"\n") - def kill(self, signal: signal.Signals = signal.SIGINT): + def kill( + self, + signal_to_send: signal.Signals = signal.SIGINT, + escalation_delay: float = 5.0, + bypass_escalation: bool = False, + ): + """ + Attempt to terminate the subprocess with a given signal. + + If the process does not exit within `escalation_delay` seconds, escalate to SIGTERM and eventually SIGKILL if necessary. + + :param signal_to_send: The signal to send initially (default is SIGINT). + :param escalation_delay: Time in seconds to wait before escalating to a stronger signal. + :param bypass_escalation: If True, send the signal directly to the process without escalation. + """ if self._exit_code is not None: return - with suppress(ProcessLookupError): - os.kill(self.pid, signal) + if bypass_escalation: Review Comment: This "should" be impossible to hit, assuming it's from the wait, not the os.kill call, as even if the process has exited, the process hangs around as a Zombie (on linux this shows up as `<defunct>` in `ps aux`) until something `wait`s on it. And as long as our process is alive, nothing else should wait on it. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@airflow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org