指定した時間にメッセージを表示し続けるプロセス、endを入力すると処理を終えるプロセス、
この2つを並列処理として動かすプログラムを作っております。
問題点
・endで子プロセスが終わらない
・getsにすればendで子プロセスは終わるが、親プロセスが終わらない
・子プロセスを破棄?する方法がわからない
・「終了する場合はendを入力してください」が最初に何故か2回出る
コードを書き込ませていただきます。
プログラミングがわかっていない初心者ですが、何卒ご指摘助言よろしくお願いいたします。
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main()
{
//プロセスID
int p_id;
int status;
int return_code = 0;
//フラグ
int f = 0;
char message[40];
//時間
double startTime, endTime;
double totalTime = 0.0, setTime = 0.0;
printf("\nメッセージは何にしますか?\n");
fgets(message, sizeof(message), stdin);
/* 時間をセット */
printf("何ミリ秒にセットしますか?\n");
scanf("%lf", &setTime);
//子プロセスを起動する関数fork
if ((p_id = fork()) == 0) {
/* 子プロセス */
printf("子プロセス開始\n");
char buff[40]; /* 入力文字列 */
printf("終了する場合はendを入力してください\n"); /* プロンプト表示 */
//gets(buff); /* 文字列入力 */
fgets(buff, sizeof(buff), stdin);
while(1){
if(!strcmp(buff, "end")) /* 文字列比較 */
break; /* ループ脱出 */
else
printf("終了する場合はendを入力してください\n"); /* プロンプト表示 */
fgets(buff, sizeof(buff), stdin);
//gets(buff); /* 文字列入力 */
}
printf("子プロセス終了\n");
//フラグ
f = 1;
}
else {
/* 親プロセス */
while(1){
/* タイマー開始(ミリ秒単位) */
startTime = clock();
while(1){
endTime = clock();
totalTime = ((endTime - startTime)*1000) / CLOCKS_PER_SEC;
if(totalTime >= setTime) break;
}
printf("%s", message);
//フラグ
if(f == 1)break;
//時間確認用
printf("startTime = %f\n", startTime);
printf("endTime = %f\n", endTime);
printf("totalTime = %f\n", totalTime);
//時間初期化
totalTime = 0.0;
}
if (p_id != -1) {
wait(&status);
printf("親プロセス終了\n");
}
else {
perror("親プロセス : ");
return_code = 1;
}
return return_code;
}
return(0);
}