Linux下的进程相关编程
生活随笔
收集整理的這篇文章主要介紹了
Linux下的进程相关编程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
fork()系統(tǒng)調(diào)用
fork的作用是根據(jù)一個現(xiàn)有的進程復制出一個新 進程,原來的進程稱為父進程(Parent Process) ,新進程稱為子進程(Child Process)。系統(tǒng)中 同時運行著很多進程,這些進程都是從最初只有一個進程開始一個一個復制出來的。在Shell下輸入 命令可以運行一個程序,是因為Shell進程在讀取用戶輸入的命令之后會調(diào)用fork復制出一個新 的Shell進程,然后新的Shell進程調(diào)用exec執(zhí)行新的程序。例如:在Shell提示符下輸入命令ls,首先fork創(chuàng)建子進程,這時父進程仍在執(zhí)行/bin/bash程序,然后子進程調(diào)用exec執(zhí)行新的程序/bin/ls
除了子進程和父進程的進程ID不同,其他資源一模一樣。
——創(chuàng)建子進程
函數(shù)原型:
#include<sys/types.h> #include <unistd.h> pid_t fork(void);返回值信息:(一次調(diào)用兩次返回的性質(zhì))
fork調(diào)用失敗則返回-1,
成功調(diào)用后父進程中返回值為子進程的pid,在子進程中返回值為1
其執(zhí)行順序不定!
命令設(shè)置gdb
setfollow-fork-mode child 在fork之后跟蹤子進程
set follow-fork-mode parent 則是跟蹤父進程,然后用run命令,看到的現(xiàn)象是父進程一直在運行
demo:
#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <erron.h>int main(int argc, char **argv) { pid_t m_pid; m_pid = fork(); if (pid < 0){ perror("fork failed"); exit(1); } if (m_pid == 0){printf("i am child! \n"); } else { printf("i am parent! \n");} return 0; }總結(jié)
以上是生活随笔為你收集整理的Linux下的进程相关编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可重入代码
- 下一篇: linux 其他常用命令