gpt4 book ai didi

linux - 为什么 wineserver 在后台运行时在子进程中设置主套接字?

转载 作者:太空狗 更新时间:2023-10-29 11:10:29 25 4
gpt4 key购买 nike

 771     if (!foreground)
772 {
773 if (pipe( sync_pipe ) == -1) fatal_perror( "pipe" );
774 pid = fork();
775 switch( pid )
776 {
777 case 0: /* child */
778 setsid();
779 close( sync_pipe[0] );
780
781 acquire_lock();
782
783 /* close stdin and stdout */
784 dup2( fd, 0 );
785 dup2( fd, 1 );
786
787 /* signal parent */
788 dummy = 0;
789 write( sync_pipe[1], &dummy, 1 );
790 close( sync_pipe[1] );
791 break;
792
793 case -1:
794 fatal_perror( "fork" );
795 break;
796
797 default: /* parent */
798 close( sync_pipe[1] );
799
800 /* wait for child to signal us and then exit */
801 if (read( sync_pipe[0], &dummy, 1 ) == 1) _exit(0);
802
803 /* child terminated, propagate exit status */
804 wait4( pid, &status, 0, NULL );
805 if (WIFEXITED(status)) _exit( WEXITSTATUS(status) );
806 _exit(1);
807 }
808 }
809 else /* remain in the foreground */
810 {
811 acquire_lock();
812 }

acquire_lock() 用于设置主套接字,问题是在后台运行时,为什么 fork() 并让子进程完成工作,而父进程只是等待并退出 ()?为什么不在前台运行时呢?

最佳答案

fork() 并让子进程完成工作”“在后台运行”。

管道是一种习惯用法,让父级留在身边,而子级进行可能会失败的设置(在这种情况下,获取锁),并在失败发生时正确传播;否则,您无法轻易发现 child 失败了,但必须检查它是否存在或事后扫描日志文件以查看是否出了问题。

关于linux - 为什么 wineserver 在后台运行时在子进程中设置主套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com