sem: --fg exit code = exit code from command.

This commit is contained in:
Ole Tange 2022-02-17 11:31:25 +01:00
parent be43ddb832
commit 3461b32dea
5 changed files with 676 additions and 264 deletions

View file

@ -115,9 +115,18 @@ sub halt() {
} }
wait_and_exit($Global::halt_exitstatus); wait_and_exit($Global::halt_exitstatus);
} else { } else {
if($Global::semaphore) {
# --semaphore runs a single job:
# Use exit value of that
wait_and_exit($Global::halt_exitstatus);
} else {
# 0 = all jobs succeeded
# 1-100 = n jobs failed
# 101 = >100 jobs failed
wait_and_exit(min(undef_as_zero($Global::exitstatus),101)); wait_and_exit(min(undef_as_zero($Global::exitstatus),101));
} }
} }
}
sub __PIPE_MODE__() {} sub __PIPE_MODE__() {}
@ -2296,7 +2305,7 @@ sub check_invalid_option_combinations() {
sub init_globals() { sub init_globals() {
# Defaults: # Defaults:
$Global::version = 20220122; $Global::version = 20220202;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$::name = "GNU Parallel"; $::name = "GNU Parallel";
$Global::infinity = 2**31; $Global::infinity = 2**31;
@ -9978,7 +9987,7 @@ sub start($) {
eval{ setpgrp(0,0) }; eval{ setpgrp(0,0) };
eval{ setpriority(0,0,$opt::nice) }; eval{ setpriority(0,0,$opt::nice) };
exec($Global::shell,"-c",$command) exec($Global::shell,"-c",$command)
|| ::die_bug("open3-$stdin_fh $command"); || ::die_bug("open3-$stdin_fh ".substr($command,0,200));
} }
}; };
return $pid; return $pid;
@ -10134,7 +10143,7 @@ sub start($) {
}; };
close $devtty_fh; close $devtty_fh;
$job->set_virgin(0); $job->set_virgin(0);
} elsif($opt::semaphore) { } elsif($Global::semaphore) {
# Allow sem to read from stdin # Allow sem to read from stdin
$pid = open3_setpgrp("<&STDIN",$stdout_fh,$stderr_fh,$command); $pid = open3_setpgrp("<&STDIN",$stdout_fh,$stderr_fh,$command);
$job->set_virgin(0); $job->set_virgin(0);
@ -11081,6 +11090,13 @@ sub set_exitsignal($$) {
# Returns: N/A # Returns: N/A
my $job = shift; my $job = shift;
my $limit; my $limit;
if($Global::semaphore) {
# Emulate Bash's +128 if there is a signal
$Global::halt_exitstatus =
($job->exitstatus()
or
$job->exitsignal() ? $job->exitsignal() + 128 : 0);
}
if($job->exitstatus() or $job->exitsignal()) { if($job->exitstatus() or $job->exitsignal()) {
# Job failed # Job failed
$Global::exitstatus++; $Global::exitstatus++;
@ -12412,7 +12428,7 @@ sub tmux_length($) {
::debug("tmux","tmux-out ",@out); ::debug("tmux","tmux-out ",@out);
chomp @out; chomp @out;
# The arguments is given 3 times on the command line # The arguments is given 3 times on the command line
# and the wrapping is around 30 chars # and the tmux wrapping is around 30 chars
# (29 for tmux1.9, 33 for tmux1.8) # (29 for tmux1.9, 33 for tmux1.8)
my $tmux_len = ::max(@out); my $tmux_len = ::max(@out);
$len = ::min($len,int($tmux_len/4-33)); $len = ::min($len,int($tmux_len/4-33));

File diff suppressed because it is too large Load diff

View file

@ -63,6 +63,28 @@ par_semaphore-timeout() {
stdout sem --id st --wait stdout sem --id st --wait
} }
par_exit() {
echo '### Exit values'
test_exit() {
stdout sem --fg --id exit$1 exit $1
echo $?
}
export -f test_exit
parallel --tag -k test_exit ::: 0 1 10 100 101 102 222 255
echo '### Exit values - signal'
test_signal() {
bash -c 'kill -'$1' $$'
echo Bash exit value $?
stdout sem --fg --id signal$1 kill -$1 '$$'
echo Sem exit value $?
}
export -f test_signal
stdout parallel -k --timeout 3 --tag test_signal ::: {0..64} |
perl -pe 's/line 1: (\d+)/line 1: PID/'
}
export -f $(compgen -A function | grep par_) export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | LC_ALL=C sort | compgen -A function | grep par_ | LC_ALL=C sort |
parallel --timeout 3000% -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' | parallel --timeout 3000% -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |

View file

@ -17,6 +17,198 @@ par_2jobs done 3
par_2jobs done 4 par_2jobs done 4
par_bg_p_should_error ### Test bug #33621: --bg -p should give an error message par_bg_p_should_error ### Test bug #33621: --bg -p should give an error message
par_bg_p_should_error parallel: Error: Jobs running in the background cannot be interactive. par_bg_p_should_error parallel: Error: Jobs running in the background cannot be interactive.
par_exit ### Exit values
par_exit 0 0
par_exit 1 1
par_exit 10 10
par_exit 100 100
par_exit 101 101
par_exit 102 102
par_exit 222 222
par_exit 255 255
par_exit ### Exit values - signal
par_exit 0 Bash exit value 0
par_exit 0 Sem exit value 0
par_exit 1 Bash exit value 129
par_exit 1 Sem exit value 129
par_exit 1 environment: line 1: PID Hangup bash -c 'kill -'$1' $$'
par_exit 2 Bash exit value 130
par_exit 2 Sem exit value 130
par_exit 3 Bash exit value 0
par_exit 3 Sem exit value 0
par_exit 4 Bash exit value 132
par_exit 4 Sem exit value 132
par_exit 4 environment: line 1: PID Illegal instruction (core dumped) bash -c 'kill -'$1' $$'
par_exit 5 Bash exit value 133
par_exit 5 Sem exit value 133
par_exit 5 environment: line 1: PID Trace/breakpoint trap (core dumped) bash -c 'kill -'$1' $$'
par_exit 6 Bash exit value 134
par_exit 6 Sem exit value 134
par_exit 6 environment: line 1: PID Aborted (core dumped) bash -c 'kill -'$1' $$'
par_exit 7 Bash exit value 135
par_exit 7 Sem exit value 135
par_exit 7 environment: line 1: PID Bus error (core dumped) bash -c 'kill -'$1' $$'
par_exit 8 Bash exit value 136
par_exit 8 Sem exit value 136
par_exit 8 environment: line 1: PID Floating point exception(core dumped) bash -c 'kill -'$1' $$'
par_exit 9 Bash exit value 137
par_exit 9 Sem exit value 137
par_exit 9 environment: line 1: PID Killed bash -c 'kill -'$1' $$'
par_exit 10 Bash exit value 138
par_exit 10 Sem exit value 138
par_exit 10 environment: line 1: PID User defined signal 1 bash -c 'kill -'$1' $$'
par_exit 11 Bash exit value 139
par_exit 11 Sem exit value 139
par_exit 11 environment: line 1: PID Segmentation fault (core dumped) bash -c 'kill -'$1' $$'
par_exit 12 Bash exit value 140
par_exit 12 Sem exit value 140
par_exit 12 environment: line 1: PID User defined signal 2 bash -c 'kill -'$1' $$'
par_exit 13 Bash exit value 141
par_exit 13 Sem exit value 141
par_exit 14 Bash exit value 0
par_exit 14 Sem exit value 0
par_exit 15 Bash exit value 143
par_exit 15 Sem exit value 143
par_exit 15 Terminated
par_exit 16 Bash exit value 144
par_exit 16 Sem exit value 144
par_exit 16 environment: line 1: PID Stack fault bash -c 'kill -'$1' $$'
par_exit 17 Bash exit value 0
par_exit 17 Sem exit value 0
par_exit 18 Bash exit value 0
par_exit 18 Sem exit value 0
par_exit parallel: Warning: This job was killed because it timed out:
par_exit parallel: Warning: test_signal 19
par_exit parallel: Warning: This job was killed because it timed out:
par_exit parallel: Warning: test_signal 20
par_exit parallel: Warning: This job was killed because it timed out:
par_exit parallel: Warning: test_signal 21
par_exit parallel: Warning: This job was killed because it timed out:
par_exit parallel: Warning: test_signal 22
par_exit 23 Bash exit value 0
par_exit 23 Sem exit value 0
par_exit 24 Bash exit value 152
par_exit 24 Sem exit value 152
par_exit 24 environment: line 1: PID CPU time limit exceeded (core dumped) bash -c 'kill -'$1' $$'
par_exit 25 Bash exit value 153
par_exit 25 Sem exit value 153
par_exit 25 environment: line 1: PID File size limit exceeded(core dumped) bash -c 'kill -'$1' $$'
par_exit 26 Bash exit value 154
par_exit 26 Sem exit value 154
par_exit 26 environment: line 1: PID Virtual timer expired bash -c 'kill -'$1' $$'
par_exit 27 Bash exit value 155
par_exit 27 Sem exit value 155
par_exit 27 environment: line 1: PID Profiling timer expired bash -c 'kill -'$1' $$'
par_exit 28 Bash exit value 0
par_exit 28 Sem exit value 0
par_exit 29 Bash exit value 157
par_exit 29 Sem exit value 157
par_exit 29 environment: line 1: PID I/O possible bash -c 'kill -'$1' $$'
par_exit 30 Bash exit value 158
par_exit 30 Sem exit value 158
par_exit 30 environment: line 1: PID Power failure bash -c 'kill -'$1' $$'
par_exit 31 Bash exit value 159
par_exit 31 Sem exit value 159
par_exit 31 environment: line 1: PID Bad system call (core dumped) bash -c 'kill -'$1' $$'
par_exit 32 Bash exit value 160
par_exit 32 Sem exit value 160
par_exit 32 environment: line 1: PID Unknown signal 32 bash -c 'kill -'$1' $$'
par_exit 33 Bash exit value 161
par_exit 33 Sem exit value 161
par_exit 33 environment: line 1: PID Unknown signal 33 bash -c 'kill -'$1' $$'
par_exit 34 Bash exit value 162
par_exit 34 Sem exit value 162
par_exit 34 environment: line 1: PID Real-time signal 0 bash -c 'kill -'$1' $$'
par_exit 35 Bash exit value 163
par_exit 35 Sem exit value 163
par_exit 35 environment: line 1: PID Real-time signal 1 bash -c 'kill -'$1' $$'
par_exit 36 Bash exit value 164
par_exit 36 Sem exit value 164
par_exit 36 environment: line 1: PID Real-time signal 2 bash -c 'kill -'$1' $$'
par_exit 37 Bash exit value 165
par_exit 37 Sem exit value 165
par_exit 37 environment: line 1: PID Real-time signal 3 bash -c 'kill -'$1' $$'
par_exit 38 Bash exit value 166
par_exit 38 Sem exit value 166
par_exit 38 environment: line 1: PID Real-time signal 4 bash -c 'kill -'$1' $$'
par_exit 39 Bash exit value 167
par_exit 39 Sem exit value 167
par_exit 39 environment: line 1: PID Real-time signal 5 bash -c 'kill -'$1' $$'
par_exit 40 Bash exit value 168
par_exit 40 Sem exit value 168
par_exit 40 environment: line 1: PID Real-time signal 6 bash -c 'kill -'$1' $$'
par_exit 41 Bash exit value 169
par_exit 41 Sem exit value 169
par_exit 41 environment: line 1: PID Real-time signal 7 bash -c 'kill -'$1' $$'
par_exit 42 Bash exit value 170
par_exit 42 Sem exit value 170
par_exit 42 environment: line 1: PID Real-time signal 8 bash -c 'kill -'$1' $$'
par_exit 43 Bash exit value 171
par_exit 43 Sem exit value 171
par_exit 43 environment: line 1: PID Real-time signal 9 bash -c 'kill -'$1' $$'
par_exit 44 Bash exit value 172
par_exit 44 Sem exit value 172
par_exit 44 environment: line 1: PID Real-time signal 10 bash -c 'kill -'$1' $$'
par_exit 45 Bash exit value 173
par_exit 45 Sem exit value 173
par_exit 45 environment: line 1: PID Real-time signal 11 bash -c 'kill -'$1' $$'
par_exit 46 Bash exit value 174
par_exit 46 Sem exit value 174
par_exit 46 environment: line 1: PID Real-time signal 12 bash -c 'kill -'$1' $$'
par_exit 47 Bash exit value 175
par_exit 47 Sem exit value 175
par_exit 47 environment: line 1: PID Real-time signal 13 bash -c 'kill -'$1' $$'
par_exit 48 Bash exit value 176
par_exit 48 Sem exit value 176
par_exit 48 environment: line 1: PID Real-time signal 14 bash -c 'kill -'$1' $$'
par_exit 49 Bash exit value 177
par_exit 49 Sem exit value 177
par_exit 49 environment: line 1: PID Real-time signal 15 bash -c 'kill -'$1' $$'
par_exit 50 Bash exit value 178
par_exit 50 Sem exit value 178
par_exit 50 environment: line 1: PID Real-time signal 16 bash -c 'kill -'$1' $$'
par_exit 51 Bash exit value 179
par_exit 51 Sem exit value 179
par_exit 51 environment: line 1: PID Real-time signal 17 bash -c 'kill -'$1' $$'
par_exit 52 Bash exit value 180
par_exit 52 Sem exit value 180
par_exit 52 environment: line 1: PID Real-time signal 18 bash -c 'kill -'$1' $$'
par_exit 53 Bash exit value 181
par_exit 53 Sem exit value 181
par_exit 53 environment: line 1: PID Real-time signal 19 bash -c 'kill -'$1' $$'
par_exit 54 Bash exit value 182
par_exit 54 Sem exit value 182
par_exit 54 environment: line 1: PID Real-time signal 20 bash -c 'kill -'$1' $$'
par_exit 55 Bash exit value 183
par_exit 55 Sem exit value 183
par_exit 55 environment: line 1: PID Real-time signal 21 bash -c 'kill -'$1' $$'
par_exit 56 Bash exit value 184
par_exit 56 Sem exit value 184
par_exit 56 environment: line 1: PID Real-time signal 22 bash -c 'kill -'$1' $$'
par_exit 57 Bash exit value 185
par_exit 57 Sem exit value 185
par_exit 57 environment: line 1: PID Real-time signal 23 bash -c 'kill -'$1' $$'
par_exit 58 Bash exit value 186
par_exit 58 Sem exit value 186
par_exit 58 environment: line 1: PID Real-time signal 24 bash -c 'kill -'$1' $$'
par_exit 59 Bash exit value 187
par_exit 59 Sem exit value 187
par_exit 59 environment: line 1: PID Real-time signal 25 bash -c 'kill -'$1' $$'
par_exit 60 Bash exit value 188
par_exit 60 Sem exit value 188
par_exit 60 environment: line 1: PID Real-time signal 26 bash -c 'kill -'$1' $$'
par_exit 61 Bash exit value 189
par_exit 61 Sem exit value 189
par_exit 61 environment: line 1: PID Real-time signal 27 bash -c 'kill -'$1' $$'
par_exit 62 Bash exit value 190
par_exit 62 Sem exit value 190
par_exit 62 environment: line 1: PID Real-time signal 28 bash -c 'kill -'$1' $$'
par_exit 63 Bash exit value 191
par_exit 63 Sem exit value 191
par_exit 63 environment: line 1: PID Real-time signal 29 bash -c 'kill -'$1' $$'
par_exit 64 Bash exit value 192
par_exit 64 Sem exit value 192
par_exit 64 environment: line 1: PID Real-time signal 30 bash -c 'kill -'$1' $$'
par_fg_line-buffer ### Failed on 20141226 par_fg_line-buffer ### Failed on 20141226
par_fg_line-buffer OK par_fg_line-buffer OK
par_fg_then_bg ### Test --fg followed by --bg par_fg_then_bg ### Test --fg followed by --bg