From 72ccceeb02542dda09b8a641c2bd17dd74440cc2 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 26 Sep 2023 07:44:40 +0000 Subject: spawn: add run_wait to simplify spawn+waitpid use It's basically the `system' perlop with support for env overrides, redirects, chdir, rlimits, and setpgid support. --- lib/PublicInbox/Spawn.pm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'lib/PublicInbox/Spawn.pm') diff --git a/lib/PublicInbox/Spawn.pm b/lib/PublicInbox/Spawn.pm index 2b84e2d5..38619fc2 100644 --- a/lib/PublicInbox/Spawn.pm +++ b/lib/PublicInbox/Spawn.pm @@ -20,8 +20,9 @@ use parent qw(Exporter); use Symbol qw(gensym); use Fcntl qw(LOCK_EX SEEK_SET); use IO::Handle (); +use Carp qw(croak); use PublicInbox::ProcessPipe; -our @EXPORT_OK = qw(which spawn popen_rd run_die); +our @EXPORT_OK = qw(which spawn popen_rd run_die run_wait); our @RLIMITS = qw(RLIMIT_CPU RLIMIT_CORE RLIMIT_DATA); BEGIN { @@ -375,11 +376,15 @@ sub popen_rd { $s; } +sub run_wait ($;$$) { + my ($cmd, $env, $opt) = @_; + waitpid(spawn($cmd, $env, $opt), 0); + $? +} + sub run_die ($;$$) { my ($cmd, $env, $rdr) = @_; - my $pid = spawn($cmd, $env, $rdr); - waitpid($pid, 0) == $pid or die "@$cmd did not finish"; - $? == 0 or die "@$cmd failed: \$?=$?\n"; + run_wait($cmd, $env, $rdr) and croak "E: @$cmd failed: \$?=$?"; } 1; -- cgit v1.2.3-24-ge0c7