Skip to content

[Feature] Add timeout parameter and TimeoutError to run API #65

Open
@newamber

Description

@newamber

Is your feature request related to a problem? Please describe.
When executing external processes using the run API, there's currently no way to set a time limit for their execution. This can be problematic if a subprocess becomes unresponsive or takes an excessively long time to complete, potentially leading to the calling application hanging indefinitely or consuming excessive resources.

Describe the solution you'd like
I'd like to propose adding a timeout parameter to the run API. If the subprocess execution time exceeds this specified timeout value, the run function should throw a new error type, perhaps named TimeoutError. This would allow users to gracefully handle scenarios where a subprocess exceeds its expected execution time. Upon catching a TimeoutError, users could then choose to inspect the process's PID (if available) and programmatically terminate the hanging process if necessary.

Describe alternatives you've considered
Currently, managing timeouts would require implementing custom timer mechanisms and process monitoring outside of swift-subprocess, which adds complexity and boilerplate code for a common use case.

Additional context
This feature is inspired by similar functionality found in other languages' subprocess libraries. For example, Python's subprocess.run function offers a timeout parameter and raises a TimeoutExpired exception, providing a robust way to manage long-running processes. You can refer to the Python documentation here: https://docs.python.org/3.13/library/subprocess.html#using-the-subprocess-module

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions