File tree Expand file tree Collapse file tree 2 files changed +30
-6
lines changed Expand file tree Collapse file tree 2 files changed +30
-6
lines changed Original file line number Diff line number Diff line change @@ -519,12 +519,33 @@ impl ProcessLifecycle<ExecProcess> for RuncExecLifecycle {
519
519
} else if p. exited_at . is_some ( ) {
520
520
Err ( Error :: NotFoundError ( "process already finished" . to_string ( ) ) )
521
521
} else {
522
- // TODO this is kill from nix crate, it is os specific, maybe have annotated with target os
523
- kill (
524
- Pid :: from_raw ( p. pid ) ,
525
- nix:: sys:: signal:: Signal :: try_from ( signal as i32 ) . unwrap ( ) ,
526
- )
527
- . map_err ( Into :: into)
522
+ let pid = p. pid ;
523
+ let kill_future = tokio:: task:: spawn_blocking ( move || {
524
+ kill (
525
+ Pid :: from_raw ( pid) ,
526
+ nix:: sys:: signal:: Signal :: try_from ( signal as i32 ) . unwrap ( ) ,
527
+ )
528
+ } ) ;
529
+
530
+ match tokio:: time:: timeout ( std:: time:: Duration :: from_secs ( 3 ) , kill_future) . await {
531
+ Ok ( Ok ( result) ) => result. map_err ( Into :: into) ,
532
+ Ok ( Err ( e) ) => Err ( Error :: Other ( format ! ( "kill task error: {}" , e) ) ) ,
533
+ Err ( _) => {
534
+ debug ! (
535
+ "kill operation timed out for pid {}, signal {}" ,
536
+ pid, signal
537
+ ) ;
538
+ // timeout also return ok
539
+ // For termination signals, it may have taken effect even if it timed out
540
+ if signal == 9 || signal == 15 {
541
+ Ok ( ( ) )
542
+ } else {
543
+ Err ( Error :: DeadlineExceeded (
544
+ "kill operation timed out" . to_string ( ) ,
545
+ ) )
546
+ }
547
+ }
548
+ }
528
549
}
529
550
}
530
551
Original file line number Diff line number Diff line change @@ -79,6 +79,9 @@ pub enum Error {
79
79
#[ error( "Failed to send exit event: {0}" ) ]
80
80
Send ( #[ from] std:: sync:: mpsc:: SendError < ExitEvent > ) ,
81
81
82
+ #[ error( "Deadline exceeded: {0}" ) ]
83
+ DeadlineExceeded ( String ) ,
84
+
82
85
#[ error( "Other: {0}" ) ]
83
86
Other ( String ) ,
84
87
You can’t perform that action at this time.
0 commit comments