【UNIX】进程创建与进程控制相关系统调用函数

本文详细介绍了在UNIX系统中如何使用fork(), exec(), wait(), kill()等系统调用函数创建和控制进程。fork()用于创建子进程,exec()用于替换进程的执行程序,wait()用于控制进程执行顺序,kill()则用于发送信号控制进程。文章通过实例代码展示了这些函数的使用方法,并提及了shell如何利用这些调用来实现命令执行。" 130436781,7354514,ROS开发利器:常用工具与命令详解,"['机器人', 'ROS开发', '仿真技术', '自动化', '软件工具']
摘要由CSDN通过智能技术生成


Introduction

  本文主要讨论在UNIX系统如何通过一系列系统调用函数创建与控制进程,创建进程时用到的系统调用函数主要有:fork()、exec()、wait()等,控制进程用到的系统调用函数主要有:kill()等。下面结合代码详细介绍上述系统调用函数功能。


一、创建进程

  fork()可用于创建一个新的进程,更确切的说,它主要是用于在父进程中创建一个子进程,当调用此函数时,操作系统会为子进程分配其自己的地址空间、寄存器、PC等,子进程运行的代码是父进程代码的复制,但是执行不是从main函数开始,而是从fork()被调用的那行代码开始。fork()的返回值在父进程和子进程中也不一样,父进程中fork()的返回值为子进程的PID,而子进程中fork()的返回值为0.
  当调用fork()函数时,因为CPU调度器的复杂性,父进程和子进程的执行顺序其实是不确定的,此时可以使用wait()函数来控制两个进程的执行,使其执行顺序由不确定变为确定。调用wait()函数可以使执行延迟,直到子进程完成执行。
  除此之外,上面有提到fork()创建的子进程执行的代码是父进程的复制,如果要运行另一个程序可以调用exec()函数,当进程调用exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的main函数开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。使用上述fork()、wait()、exec()函数创建进程的实例代码如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc, char *argv[])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值