mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
951 B
45 lines
951 B
/* |
|
* This program handles SIGINT and forwards it to another process. |
|
* It is intended to be run as PID 1. |
|
* |
|
* Docker starts processes with "docker run" as PID 1. |
|
* On Linux, the default signal handler for PID 1 ignores any signals. |
|
* Therefore Ctrl-C aka SIGINT is ignored per default. |
|
*/ |
|
|
|
#include <unistd.h> |
|
#include <stdio.h> |
|
#include <signal.h> |
|
#include <sys/types.h> |
|
#include <sys/wait.h> |
|
|
|
int pid = 0; |
|
|
|
void |
|
handle_sigint (int signum) |
|
{ |
|
if(pid) |
|
kill(pid, SIGINT); |
|
} |
|
|
|
int main(int argc, char *argv[]){ |
|
struct sigaction new_action; |
|
int status = -1; |
|
|
|
/* Set up the structure to specify the new action. */ |
|
new_action.sa_handler = handle_sigint; |
|
sigemptyset (&new_action.sa_mask); |
|
new_action.sa_flags = 0; |
|
|
|
sigaction (SIGINT, &new_action, (void*)0); |
|
|
|
pid = fork(); |
|
if(pid){ |
|
wait(&status); |
|
return WEXITSTATUS(status); |
|
}else{ |
|
status = execvp(argv[1], &argv[1]); |
|
perror("exec"); |
|
return status; |
|
} |
|
}
|
|
|