Linux的多任务编程

1.进程

1.1概念

 进程是程序的一次动态执行过程,包括创建、调度、消亡,是程序执行和资源(内存)管理的最小单位

1.2相关系统调用

1.2.1fork、exec

  • fork

    • 头文件:

      • #include <sys/types.h>

      • #include <unistd.h>

    • 原型:pid_t fork(void);

    • 返回值

      • on success,the PID of the child process is returned in the parent, and 0 is returned inthe child. on failure,-1 is returned in the parent,no child process is created,anderrno is set appropriately.

  • exec函数族

    • exec函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。

 

1.2.2wait和waitpid

  • wait

    • 头文件:

      • <sys/types.h>

      • <sys/wait.h>

    • 原型:

      • pid_t wait(int *status);

    • 描述:

      • 调用该函数使进程阻塞,直到任一个子进程结束或者是该进程接收到了一个信号为止。如果该进程没有子进程或者其子进程己经结束,wait函数会立即返回。

    • 参数:

      • status的指针,用来保存子进程的退出状态。 - status为空,表示忽略子进程的退出状态 - status不为空,表示保存子进程退出的状态

    • 返回值 :

      • 成功返回进程号;失败返回-1

      • - WIFEXITED(wstatus) :如果子进程是通过调用 exit(3) 或 _exit(2) 或从 main() 函数返回而正常终止的,则返回 true 。

      • - WEXITSTATUS(wstatus) :返回子进程的退出状态。退出状态是子进程在调用 exit(3) 或 _exit(2) 或在 main() 函数的返回语句中指定的状态参数的最低有效8位。只有当 WIFEXITED 返回 true 时,才应使用此宏。

      • - WIFSIGNALED(wstatus) :如果子进程是被信号终止的,则返回 true 。

      • - WTERMSIG(wstatus) :返回导致子进程终止的信号编号。只有当 WIFSIGNALED 返回 true 时,才应使用此宏。

      • - WCOREDUMP(wstatus) :如果子进程产生了一个核心转储文件,则返回 true 。这个宏应该只在 WIFSIGNALED 返回 true 时使用。需要注意的是,这个宏在POSIX.1-2001标准中没有指定,并且在某些UNIX实现中不可用。

      • - WIFSTOPPED(wstatus) :如果子进程被信号暂停,则返回 true 。这只有在使用 WUNTRACED 调用或子进程正在被跟踪(参见 ptrace(2) )时才可能发生。

      • - WSTOPSIG(wstatus) :返回导致子进程停止的信号编号。只有当 WIFSTOPPED 返回 true 时,才应使用此宏。

      • - WIFCONTINUED(wstatus) :(自Linux 2.6.10起)如果子进程通过 SIGCONT 信号恢复执行,则返回 true 。

 示例:

1.2.3exit、_exit、return

①  exit 函数:
   - 声明: void exit(int status); 
   - 功能: exit 函数用于正常终止程序的执行,并将指定的退出状态码传递给操作系统。它会执行一系列清理操作,包括关闭打开的文件、释放动态分配的内存等。然后将控制权返回给操作系统。
   - 注意事项: exit 函数会调用所有已注册的 atexit 函数,这些函数可以在程序中注册,用于在程序退出之前执行一些特定的操作。

②  _exit 函数:
   - 声明: void _exit(int status); 
   - 功能: _exit 函数用于立即终止程序的执行,不会进行任何清理操作。它会直接将退出状态码传递给操作系统,并立即返回控制权给操作系统。
   - 注意事项:由于 _exit 函数不会执行清理操作,因此可能会导致一些资源泄漏,如未关闭的文件描述符、未释放的内存等。

③  return 语句:
   - 功能: return 语句用于从函数中返回一个值,并将控制权返回给调用该函数的地方。它可以在任何函数中使用,包括 main 函数。
   - 注意事项: 在 main 函数中使用 return 语句可以提前终止程序的执行。

        总结:
        -  exit 函数和 _exit 函数都可以用于终止程序的执行,但 exit 函数会刷新缓冲区操作,而 _exit 函数不会刷新。
        -  return 语句用于从函数中返回一个值,并将控制权返回给调用该函数的地方。

1.3守护进程

1.3.1特点

 从系统启动开始运行,系统关闭时停止运行;后台进程,与终端无关。

1.3.2创建

①创建子进程,父进程退出
②在子进程中创建新会话
③改变当前目录为根目录
⑤重设文件权限掩码
⑥关闭文件描述符

示例:

1.4通信

1.4.1管道

①无名管道

②有名管道

1.4.2信号

1.4.3IPC对象

2.线程

2.1创建

2.2多线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值