【问题标题】:Conceptual Questions About Processes and Signals关于进程和信号的概念问题
【发布时间】:2015-06-10 22:33:04
【问题描述】:

我正在准备系统编程的期末考试,我有几个问题无法回答。

  1. 假设一个父进程派生出一个创建大对象的子进程。子节点能否仅使用信号轻松将此对象传回父节点?

  2. 父进程派生出一个子进程,子进程继续运行相同的程序。父母将数据结构提供给在分叉之前创建的孩子以写入单独的文件并将其提供给孩子的最佳方式是什么? (这个我觉得不是什么好办法,因为孩子还是会分享一些父母的数据,包括说的数据结构)

  3. 假设您编写了一个程序来测量 人的手指是通过捕获 SIGINT 然后要求他们按下 Ctrl-C 尽可能快。 SIGINT 信号处理程序增加一个 每次键入 Ctrl-C 时的全局计数器。在预定义的时间后 停止并打印除以使用时间的全局计数器。 这个程序的根本问题是什么?

感谢任何帮助。

【问题讨论】:

    标签: c++ c process signals


    【解决方案1】:

    对您的问题的一些快速思考;

    1. 不,信号不适合传输数据。信号涉及大量开销,并且没有非常有效地排队。
    2. 有许多 IPC 方法可用。在 UNIX 中最流行的两个是套接字和共享内存(例如,参见 shm)。在与不受信任的应用程序通信时,套接字通常更好。在您分叉应用程序的示例中,管道也适用。
    3. 只要您处理中断的速度比它们进来的快得多,就可以了。可能在您的 ctrl-c 示例中,您可以使用 poll 和 fcntl(在 UNIX 上)执行相同的操作,并且您可能会获得更好的精度。

    【讨论】:

    • 我可以补充和详细说明 1。因为 Claris 是 100% 正确的。当你 fork 一个进程时,你创建了 2 个进程,从现在开始它们有完全独立的上下文。换句话说,它们之间不共享内存,它们可能使用相同的虚拟内存,但它们会映射到不同的物理内存。对于 IPC,还有命名管道和未命名管道。
    猜你喜欢
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多