• peter
    2022-09-30 来自湖北
    老师的课很不错啊,请教几个问题: Q1:管道能否用于非父子进程之间的通信? 文中管道例子的两个进程是父子进程,使用了fork。假如两个进程不是通过fork产生的,即不是父子关系,那么,这两个进程可以通过管道通信吗? 注:对于信号,同样存在这个问题:信号能否用于非父子进程之间的通信?(没有用fork) Q2:管道读取端的文件句柄被关闭后,是自动调用write,还是进程调用write时返回0? 文中这句话“如果所有管道写入端对应的文件句柄被关闭,则进程调用 read 时将返回 0;如果所有管道的读取端对应的文件句柄被关闭,则会调用 write,从而产生 SIGPIPE 信号,这可能导致调用 write 进程退出”。 这句话有两个“如果”,前一个“如果”是讲写入端,结果是“read会返回0”。后一个“如果”是讲读取端,感觉应该是对称的啊,对称的话,后半部分应该是“则进程调用 write 时将返回 0”。但文中写的是“则会调用 write”,给人的感觉就是“文件句柄关闭后,即使进程没有调用wirte,也会有个东西自动调用write”。 请问:这里是笔误吗? 假如不是笔误,是谁自动调用write?是内核自动调用吗? Q3:管道内部的缓冲可以设置吗? Q4:应用进程可以给Linux内核发送信号吗? Q5:信号例子的死循环会导致系统卡死吗? 信号例子的代码中,循环代码“while(1) { ;// 死循环防止进程退出 }” ,循环体中什么都没有,没有阻塞,没有等待,会导致系统卡死吗? Q6:Hello OS可以安装在虚拟机上吗? 我正在看老师的另外一门课《操作系统实战45讲》,其中第02课是讲Hello OS的。这个Hello OS是安装在Linux下。我没有专门的Linux电脑,我的笔记本是 win10,用VMWare安装了Ubuntu22虚拟机。请问,Hello OS可以安装在此Ubuntu22虚拟机下吗?
    展开

    作者回复: Q1 可以不同的进程 Q2 会发生错误 Q3 可以 Q4 不可以 Q5 不会 Q6 可以 但不能用VMWare

    
    2
  • LockedX
    2022-10-06 来自湖北
    管道:原理上是通过共享文件来实现的,优点是能够传输任意信息,缺点是只能单向传输 信号:原理上是通过中断来实现的,优点是异步通信并且某些信号可以自定义函数,缺点是只能传递固定的信号

    作者回复: 正确

    
    1
  • 贾献华
    2022-09-30 来自湖北
    SIGQUIT 应该是 Ctrl+\ 控制吧!

    作者回复: 不好意思可能 是 笔误

    共 2 条评论
    1
  • 苏流郁宓
    2022-09-30 来自湖北
    管道需要信号调节的(从一个进程数据传输到另一个进程) 在同一时间只允许单向传输(谁是输出方谁是接受方由信号调节决定)?

    作者回复: 管道和信号 没有关系

    
    1
  • 极客酱酱
    2022-11-02 来自湖北
    goroutiner 可以实现类似进程通信的机制吗?好像不能获取到goroutiner 的id,那怎么通知呢?

    作者回复: 可以的 有别的方法

    
    