2016-04-22 24 views
1

私はC/C++ DevelopersバージョンのEclipseを使用して、Ctrl + CをクリックしてシグナルSIGINTを送信するコードを記述します。しかし、コンソールからコードを実行すると、Ctrl + Cに反応しないことがわかります。 Ctrl + Cの機能をコピー用のキーマップとして扱いませんでしたが、それでも問題は解決しません。 私はそれを解決するために何ができるのか知っていますか?C/C++開発者のためのEclipseとCtrl + C

コード例:あなたは、Linuxのターミナルから、このコードを実行する場合は、「Ctrlキー+ C」をクリックすると

#include <sys/types.h> 
#include <sys/wait.h> 
#include <stdio.h> 


static void sig_int(int num) { 
    printf("\nerror\n"); 
} 

int main (int argc, char *argv[]) { //7 

    sigset_t zeromask; 

    if (signal(SIGINT, sig_int) == SIG_ERR) 
        fprintf(stderr,"signal(SIGINT) error"); 

    printf("Hello\n"); 

    if (sigsuspend(&zeromask) != -1) 
     fprintf(stderr,"sigsuspend error"); 

} 

することは、あなたが「エラー」の出力が得られます。しかし、Eclipseコンソールから実行すると、何も起こりません。 EclipseコンソールはCtrl + Cをキーボード割り込みとして扱いません。

+0

端末からは動作しますが、ecliseのコンソールからは動作しないと言わない限り、いくつかのコードを投稿してください。 – Shark

+0

私の投稿を編集してコードを追加しました。 – CrazySynthax

+0

https://stackoverflow.com/questions/8814383/sending-sigint-ctrl-c-to-program-running-in-eclipse-console https://stackoverflow.com/search – Rei

答えて

1

なぜなら、gdbはSIGINT信号を受け取り、それを渡さないからです。

あなたはGDBコンソール(gdbのバージョンと1;「痕跡」標識されていないもの)に行けばと、「情報信号」を入力してくださいあなたは、次のようなリストが表示されます:

info signals 
Signal  Stop Print Pass to program Description 

SIGHUP  Yes Yes Yes  Hangup 
SIGINT  Yes Yes No  Interrupt 
SIGQUIT  Yes Yes Yes  Quit 
SIGILL  Yes Yes Yes  Illegal instruction 

Pass for SIGINTがNOに設定されていることに注意してください。

は、次のように入力しますSIGINTパスを扱うあなたが本当に確信している場合、それは求めることができるので、

SIGINTもGDBで使用されています。

EDIT:私は、Eclipseからの簡単なプログラムを試したときにプログラムが一時停止されるまで

、プログラムがSIGINTを受信して​​いません。これはEclipseに問題がある可能性があります。 gdbから直接実行すると、プログラムは期待通りに動作します。

関連する問題