📅  最后修改于: 2023-12-03 15:26:03.749000             🧑  作者: Mango
这是一道常见的操作系统和进程管理方面的问题。在实际开发工作中,掌握进程间通信的方式是非常重要的,而管道、信号和消息队列等都是常用的进程间通信方式。
下列哪个系统调用可以用于创建新的进程?
A. fork()
B. exec()
C. wait()
D. signal()
A. fork()
系统调用 fork()
可以用于创建新的进程,而系统调用 exec()
用于在当前进程中加载新的程序,而 wait()
用于父进程等待子进程完成。signal()
用于处理信号,通常用于捕获程序异常或者在程序中主动发送信号。
除了系统调用,进程之间还可以通过其他途径进行通信。以下是一些常见的进程间通信方式:
管道是一种半双工的通信方式,只能在父子进程之间使用。父进程通过 pipe()
系统调用创建管道,然后通过 fork()
创建一个子进程。父进程可以把数据写入管道,子进程可以从管道中读取数据。相关系统调用包括 pipe()
、fork()
、read()
和 write()
。
消息队列是一种具有一定缓存区的全双工通信方式,可以在不同进程之间使用。可以通过 msgget()
、msgsnd()
和 msgrcv()
等系统调用来创建和使用消息队列。
信号是一种异步通信方式,可以在不同进程之间使用。进程可以向另一个进程发送信号,也可以捕获来自其他进程的信号。相关系统调用包括 kill()
、signal()
和 sigaction()
。
共享内存是一种高效的通信方式,可以在不同进程之间共享内存段,从而实现数据的共享。相关系统调用包括 shmget()
、shmat()
、shmdt()
和 shmctl()
。
套接字是一种全双工通信方式,可以在不同进程之间使用。常见于网络编程中,可以通过套接字实现网络通信。相关系统调用包括 socket()
、bind()
、listen()
、accept()
、connect()
、send()
和 recv()
等。