今日「殺す」ことは困難であるプログラムを作成する方法:C - 私はプロジェクトを与えられたと(以下貼り付けられている私のコード)は、次の操作を行うように言われた
ゴキブリを殺すために悪名高い難しいですが。あなたの仕事は、2つのプロセスで殺すことが非常に困難な ブザープログラムを作成することです。 基本的には:
- 父のプロセスをフォーク子と子のビープ音が鳴り父親が死亡した場合、子は父のフォークに別の1
- を死亡した場合にのみ、すべての0.5秒(
usleep()
をご確認ください)- 父を見て子フォーク新しい子と2のいずれかがSTのメッセージを表示し
SIGTERM
を受信した場合、どちらの停止父親
の役割を担っていますdoutまたはstderrが発生し、 すべてのメッセージにプロセスIDを追加して、どのプロセスにどのプロセスが発行されたかを知ることができます。
私は最初の2つの問題を解決することができましたが、私は3と4を解決することができません。私は4のアイデアを幾分持ちますが、3から始めるべき場所を知りません。
#define SLEEP_TIME 500000
static int keepGoing = 1;
int main() {
//signal(SIGALRM,(void (*))kill_child);
//useconds_t nap = .5;
int nap = SLEEP_TIME;
int status;
pid_t child_pid = -1;
while(keepGoing == 1){
//signal(SIGTERM, sig_handler);
//signal(SIGCHLD, sig_handler);
if(child_pid != 0){//&& getppid() != 1){
printf("Beep\n");
printf("Parent: %d\n", getpid());
child_pid = fork();
pid_t deleted = wait(&status); //Get the ID of anything that was killed
if(deleted != -1){
printf("\nChild %d was killed\n", deleted); //Print it out
}
}else if(getppid() != 1){
printf("Child: %d\n", getpid());
//childHandler(child_pid);
usleep(nap); //Sleep every .5sec
}else{ //The parent was killed
printf("\nParent was deleted %d is the new parent\n", getpid());
child_pid = fork();
pid_t deleted = wait(&status); //Get the ID of anything that was killed
if(deleted != -1){
printf("\nChild %d was killed\n", deleted); //Print it out
}
sleep(5);
}
}
return 0;
}
ええと....プログラムが起動したらあなたは感染します。 – randominstanceOfLivingThing