@@ -208,8 +208,14 @@ fn install_signal_handlers(term_signal: usize) {
208208 let sigpipe_ignored = uucore:: signals:: sigpipe_was_ignored ( ) ;
209209
210210 for sig in [
211- Signal :: SIGALRM , Signal :: SIGINT , Signal :: SIGQUIT , Signal :: SIGHUP ,
212- Signal :: SIGTERM , Signal :: SIGPIPE , Signal :: SIGUSR1 , Signal :: SIGUSR2 ,
211+ Signal :: SIGALRM ,
212+ Signal :: SIGINT ,
213+ Signal :: SIGQUIT ,
214+ Signal :: SIGHUP ,
215+ Signal :: SIGTERM ,
216+ Signal :: SIGPIPE ,
217+ Signal :: SIGUSR1 ,
218+ Signal :: SIGUSR2 ,
213219 ] {
214220 if sig != Signal :: SIGPIPE || !sigpipe_ignored {
215221 let _ = unsafe { nix:: sys:: signal:: signal ( sig, handler) } ;
@@ -224,8 +230,18 @@ fn install_signal_handlers(term_signal: usize) {
224230/// Report that a signal is being sent if the verbose flag is set.
225231fn report_if_verbose ( signal : usize , cmd : & str , verbose : bool ) {
226232 if verbose {
227- let s = if signal == 0 { "0" . to_string ( ) } else { signal_name_by_value ( signal) . unwrap ( ) . to_string ( ) } ;
228- let _ = writeln ! ( std:: io:: stderr( ) , "timeout: sending signal {} to command {}" , s, cmd. quote( ) ) ;
233+ let s = if signal == 0 {
234+ "0" . to_string ( )
235+ } else {
236+ signal_name_by_value ( signal) . unwrap ( ) . to_string ( )
237+ } ;
238+ let mut stderr = std:: io:: stderr ( ) ;
239+ let _ = writeln ! (
240+ stderr,
241+ "timeout: {}" ,
242+ translate!( "timeout-verbose-sending-signal" , "signal" => s, "command" => cmd. quote( ) )
243+ ) ;
244+ let _ = stderr. flush ( ) ;
229245 }
230246}
231247
@@ -361,6 +377,9 @@ fn timeout(
361377 }
362378 }
363379
380+ install_sigchld ( ) ;
381+ install_signal_handlers ( signal) ;
382+
364383 let process = & mut cmd_builder. spawn ( ) . map_err ( |err| {
365384 let status_code = match err. kind ( ) {
366385 ErrorKind :: NotFound => ExitStatus :: CommandNotFound . into ( ) ,
@@ -372,8 +391,6 @@ fn timeout(
372391 translate ! ( "timeout-error-failed-to-execute-process" , "error" => err) ,
373392 )
374393 } ) ?;
375- install_sigchld ( ) ;
376- install_signal_handlers ( signal) ;
377394
378395 match process. wait_or_timeout ( duration, Some ( & SIGNALED ) ) {
379396 Ok ( Some ( status) ) => Err ( status
@@ -383,15 +400,29 @@ fn timeout(
383400 Ok ( None ) => {
384401 let received_sig = RECEIVED_SIGNAL . load ( atomic:: Ordering :: Relaxed ) ;
385402 let is_external_signal = received_sig > 0 && received_sig != libc:: SIGALRM ;
386- let signal_to_send = if is_external_signal { received_sig as usize } else { signal } ;
403+ let signal_to_send = if is_external_signal {
404+ received_sig as usize
405+ } else {
406+ signal
407+ } ;
387408
388409 report_if_verbose ( signal_to_send, & cmd[ 0 ] , verbose) ;
389410 send_signal ( process, signal_to_send, foreground) ;
390411
391412 if let Some ( kill_after) = kill_after {
392- return match wait_or_kill_process ( process, & cmd[ 0 ] , kill_after, preserve_status, foreground, verbose) {
413+ return match wait_or_kill_process (
414+ process,
415+ & cmd[ 0 ] ,
416+ kill_after,
417+ preserve_status,
418+ foreground,
419+ verbose,
420+ ) {
393421 Ok ( status) => Err ( status. into ( ) ) ,
394- Err ( e) => Err ( USimpleError :: new ( ExitStatus :: TimeoutFailed . into ( ) , e. to_string ( ) ) ) ,
422+ Err ( e) => Err ( USimpleError :: new (
423+ ExitStatus :: TimeoutFailed . into ( ) ,
424+ e. to_string ( ) ,
425+ ) ) ,
395426 } ;
396427 }
397428
@@ -401,8 +432,13 @@ fn timeout(
401432 } else if SIGNALED . load ( atomic:: Ordering :: Relaxed ) {
402433 Err ( ExitStatus :: CommandTimedOut . into ( ) )
403434 } else if preserve_status {
404- Err ( status. code ( )
405- . or_else ( || status. signal ( ) . map ( |s| ExitStatus :: SignalSent ( s as usize ) . into ( ) ) )
435+ Err ( status
436+ . code ( )
437+ . or_else ( || {
438+ status
439+ . signal ( )
440+ . map ( |s| ExitStatus :: SignalSent ( s as usize ) . into ( ) )
441+ } )
406442 . unwrap_or ( ExitStatus :: CommandTimedOut . into ( ) )
407443 . into ( ) )
408444 } else {
0 commit comments