2016-03-24 3 views
0

私は、再起動コマンドを発行する場合、私はメッセージ私はどのように登録し、Linux再起動信号を処理できますか?

リブート

.... .... システムを今すぐ再起動のために下がっているを取得します! INIT:TERM信号 をプロセスを送信....

したがって "initは" すべてのプロセスにTERMを送り、私は、コマンドラインで

をコマンドを発行

void sig_handler(int signum, siginfo_t *siginfo, void *ctx) 
{ 
    printf("!!! sig_handler: signum: %d\n", signum); 
    if (signum == SIGTERM && (long) siginfo->si_pid == 1) 
    { 
     printf("!!! sig_handler: send by init-process\n"); 
    } 
    exit(signum); 
} 

void sig_handler_reg(int signum) 
{ 
    struct sigaction act; 
    memset(&act, '\0', sizeof(act)); 
    act.sa_sigaction = sig_handler; 
    act.sa_flags = SA_SIGINFO; 
    sigaction(signum, &act, NULL); 
    printf("!!! sig_handler_reg: signum %d registered\n", signum); 
} 

を、次のような用語を登録しましたpkillはmy_process

と私はメッセージ

を入手! sig_handler:シグナム:15

私は

リブート

コマンドラインでコマンドを発行し、私はsig_handlerから何のメッセージが出ていないと、システムが間違っている何

を再起動しますか?

すべてのヒントは、信号があなたのプロセスは孤児となり、したがって、initによって採択され、それがforceablyなしSYSYTEMをリブートしますので

あなたのプロセスの親プロセスが殺され終了する実行中のすべてのプロセスに送られる

答えて

1

を高く評価しましたプロセスが終了するまでお待ちください

+0

お返事ありがとうございます。私のプロセスの親は/etc/init.d/rc.localのプロセスを開始したのでinitです。 – elvis61

+0

どういう意味ですか?再起動時にどのように起動できますか? – elvis61

関連する問題