0
は私が事前定義されたループを使用せずにinfinitly 3秒ごとにプリントPIDとPPIDとループCでプログラムを書きたいあなたがよく 奇妙な睡眠行動は
を行っているホープ(無しばらくノーを。)問題は、信号ハンドラ内でスリープシステムコールを使用すると、何も印刷されませんが、私がコメントしたときに無限にループし、必要なものを印刷するということです。ここで
C規格はほとんど唯一のグローバル状態に影響を与えるシグナルハンドラ内で一つのことを行うことができますコード
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>
void handle1(int signum){
//sleep(3); // when i remove the sleep it loop infinitly and prints
printf("pid=%d ppid=%d",getpid(),getppid());
if(signum==SIGUSR1){
kill(getpid(),SIGUSR1);
}
}
int main(int argc , char* argv[]){
signal(SIGUSR1,handle1);
kill(getpid(),SIGUSR1);
}
※シグナルハンドラから安全に呼び出されるのはasync-signal-safe関数だけです。 'sleep()'と 'printf()'はどちらも非同期シグナルセーフではありません。 http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04 –
を参照してください。私はループを使用することはできません。だから問題は、私が使ったアプローチです。 –