c语言 - 将子进程的数量共享到父进程。Exit() & Wait() 或全局变量



我有一个任务,父进程需要输出子进程的退出代码。这个退出代码应该是子进程id的和,加上变量k和整体的模100。我尝试了两种方法来保存子进程的退出代码:

  • 在子进程中退出(退出代码(,并使用wait((保存在父进程中。你应该在评论中保留这一点
  • 将退出代码保存在全局变量中,并在父进程中的wait((之后输出退出代码

然而,两者都不起作用。你能帮我怎样才能做到吗?非常感谢。

#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("%dt"
int pid=getpid();
int ppid=getppid();
sprintf(ausgabe, "%d %c %d %c %dn", pid,' ', ppid,' ',zaehler);
write(STDOUT_FILENO, ausgabe, strlen(ausgabe));
sleep(1);
zaehler++;
}   
//write(STDOUT_FILENO, (getpid()+k)%100, strlen((getpid()+k)/100));
//printf("%dn", (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: %in", 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: %sn", ctime(&curtime));
return 0;
}

来自人工等待:

pid_t等待(int*状态(;

如果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: %dn", WEXITSTATUS(exitstatus));

最新更新