【发布时间】:2018-11-21 14:21:42
【问题描述】:
我有父进程需要输出子进程退出码的任务。这个退出代码应该是子进程 id 的总和,加上一个变量 k 和整个模 100。我尝试了两种方法来保存子进程的退出代码:
- 在子进程中退出(退出代码)并使用 wait() 保存在父进程中。你应该在 cmets 中仍然使用这个
- 在全局变量中保存退出代码并在父进程中等待()后输出退出代码
但是,两者都不起作用。你能帮助我如何实现它吗?谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
//globale Variable
int out;
int main()
{
//Nutzereingabe von k:
int k=0;
scanf("%d",&k);
//Erzeugen eines Kindprozesses:
if(fork()==0)
{
//Kindprozess liegt vor
int zaehler=1;
char ausgabe[256]={0};
while(zaehler<=k){
//printf("%d\t"
int pid=getpid();
int ppid=getppid();
sprintf(ausgabe, "%d %c %d %c %d\n", pid,' ', ppid,' ',zaehler);
write(STDOUT_FILENO, ausgabe, strlen(ausgabe));
sleep(1);
zaehler++;
}
//write(STDOUT_FILENO, (getpid()+k)%100, strlen((getpid()+k)/100));
//printf("%d\n", (getpid()+k)%100);
out=(getpid()+k)%100;
printf("%i", out);
exit((getpid()+k)%100);
}
else
{
//Elternprozess liegt vor
time_t curtime;
time(&curtime);
printf("Start: %s", ctime(&curtime));
}
//int exitcode=wait(NULL);
wait(NULL);
//exitcode to String casten:
char str[24];
sprintf(str, "Exit-Code: %i\n", out);
//Ausgabe und exitcode zu einem String zusammenfuegen: (vorher concat())
//char* s = concat("Exit-Code: ", str);
//strncat(*str,"Exit-Code: ",str);
//Ausgabe des Exitcodes:
write(STDOUT_FILENO, str, strlen(str));
time_t curtime;
time(&curtime);
printf("Ende: %s\n", ctime(&curtime));
return 0;
}
【问题讨论】: