3
#include <stdio.h>
#include <stdlib.h>
#include <sys/signal.h>
#include <string.h>

void handler (int sig);
int count;

int main() {

    struct sigaction act;
    memset (&act, 0, sizeof (act));


    act.sa_handler = handler;
    if (sigaction (SIGHUP, &act, NULL) < 0) {
        perror ("sigaction");
        exit (-1);
    }

    int count = 0;
    while(1) {
        sleep(1);
        count++;
    }

}

void handler (int signal_number){
        printf ("count is %d\n", count);
}

私はこれを正しく行っていると思いますが、コマンドライン内で sighup を呼び出すにはどうすればよいですか? 私のカウントを出力するには、sighup を呼び出す必要があります。

4

3 に答える 3

4

技術的には、シグナル ハンドラで I/O を行うのは安全ではありません。フラグを設定し、それを監視し、フラグに基づいて出力することをお勧めします。posix システムでは、コマンド ラインから "kill -HUP" を実行してシグナルを送信できるはずです。

于 2013-07-18T21:21:53.513 に答える
2

を使用できますkill -SIGHUP <pid><pid>はコードのプロセス ID です。

于 2013-07-18T21:20:49.053 に答える
1

コンソールでこれを試してください:

ps -a

プログラムの pid を読み取る

kill -s HUP target_pid

ここには、シグナルのリストを含む kill のマニュアルページがあります。

編集:さらに簡単にkillallを使用できます:

killall -HUP nameofyourbinary
于 2013-07-18T21:21:34.990 に答える