@@ -5655,6 +5655,23 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal)
56555655 close (pty_slave_fd );
56565656}
56575657
5658+ static char_u *
5659+ get_signal_name (int sig )
5660+ {
5661+ int i ;
5662+ char_u numbuf [NUMBUFLEN ];
5663+
5664+ if (sig == SIGKILL )
5665+ return vim_strsave ((char_u * )"kill" );
5666+
5667+ for (i = 0 ; signal_info [i ].sig != -1 ; i ++ )
5668+ if (sig == signal_info [i ].sig )
5669+ return strlow_save ((char_u * )signal_info [i ].name );
5670+
5671+ vim_snprintf ((char * )numbuf , NUMBUFLEN , "%d" , sig );
5672+ return vim_strsave (numbuf );
5673+ }
5674+
56585675 char *
56595676mch_job_status (job_T * job )
56605677{
@@ -5691,8 +5708,10 @@ mch_job_status(job_T *job)
56915708 if (WIFSIGNALED (status ))
56925709 {
56935710 job -> jv_exitval = -1 ;
5694- if (job -> jv_status < JOB_ENDED )
5695- ch_log (job -> jv_channel , "Job terminated by a signal" );
5711+ job -> jv_termsig = get_signal_name (WTERMSIG (status ));
5712+ if (job -> jv_status < JOB_ENDED && job -> jv_termsig != NULL )
5713+ ch_log (job -> jv_channel , "Job terminated by signal \"%s\"" ,
5714+ job -> jv_termsig );
56965715 goto return_dead ;
56975716 }
56985717 return "run" ;
@@ -5738,7 +5757,10 @@ mch_detect_ended_job(job_T *job_list)
57385757 /* LINTED avoid "bitwise operation on signed value" */
57395758 job -> jv_exitval = WEXITSTATUS (status );
57405759 else if (WIFSIGNALED (status ))
5760+ {
57415761 job -> jv_exitval = -1 ;
5762+ job -> jv_termsig = get_signal_name (WTERMSIG (status ));
5763+ }
57425764 if (job -> jv_status < JOB_ENDED )
57435765 {
57445766 ch_log (job -> jv_channel , "Job ended" );
0 commit comments