我的任务是父进程需要输出子进程的退出代码。该退出代码应该是子进程id的总和,带有一个附加变量k和整个模100。我尝试了两种方法来保存子进程中的退出代码:
但是,两者都不起作用。您能帮我实现目标吗?谢谢!
#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;
}
答案 0 :(得分:1)
来自man wait:
pid_t wait(int * status);
如果status不为NULL,则wait()和waitpid()将状态信息存储在它指向的int中。
WEXITSTATUS(状态) 返回子项的退出状态。这由子级在调用exit(3)或_exit(2)时指定的状态参数的最低有效8位组成。
因此使用:
}
// warte fur unserer kind
int exitstatus;
wait(&exitstatus);
// caste exitcode to string casten
char str[24];
sprintf(str, "Exit-Code: %d\n", WEXITSTATUS(exitstatus));