容器的优雅退出(3):你好,SIGTERM!
我们已经知道 1 号进程的 exit()
流程了,这样我们就仿照 Linux 处理线程信息的方法就好,只不过把最后一步通知子进程的 SIGKILL 信号改成 SIGTERM 信号。我们来尝试一下。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
pid_t child_pid = 0;
void signal_handler(int signalno)
{
if (signalno == SIGTERM)
{
printf("received SIGTERM\n");
if (child_pid > 0)
{
kill(child_pid, signo);
sleep(1);
printf("sent SIGTERM\n");
}
exit(0);
}
}
int main(int argc, char *argv[])
{
int i;
int total;
if (argc < 2)
{
total = 1;
}
else
{
total = atoi(argv[1]);
}
signal(SIGTERM, signal_handler);
printf("create %d processes\n", total);
for (i = 0; i < total; i++)
{
pid_t pid = fork();
if (pid == 0)
{
pid_t m_pid, p_pid;
m_pid