Linux下的进程相关编程
生活随笔
收集整理的這篇文章主要介紹了
Linux下的进程相关编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
fork()系統調用
fork的作用是根據一個現有的進程復制出一個新 進程,原來的進程稱為父進程(Parent Process) ,新進程稱為子進程(Child Process)。系統中 同時運行著很多進程,這些進程都是從最初只有一個進程開始一個一個復制出來的。在Shell下輸入 命令可以運行一個程序,是因為Shell進程在讀取用戶輸入的命令之后會調用fork復制出一個新 的Shell進程,然后新的Shell進程調用exec執行新的程序。例如:在Shell提示符下輸入命令ls,首先fork創建子進程,這時父進程仍在執行/bin/bash程序,然后子進程調用exec執行新的程序/bin/ls
除了子進程和父進程的進程ID不同,其他資源一模一樣。
——創建子進程
函數原型:
#include<sys/types.h> #include <unistd.h> pid_t fork(void);返回值信息:(一次調用兩次返回的性質)
fork調用失敗則返回-1,
成功調用后父進程中返回值為子進程的pid,在子進程中返回值為1
其執行順序不定!
命令設置gdb
setfollow-fork-mode child 在fork之后跟蹤子進程
set follow-fork-mode parent 則是跟蹤父進程,然后用run命令,看到的現象是父進程一直在運行
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; }總結
以上是生活随笔為你收集整理的Linux下的进程相关编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可重入代码
- 下一篇: exit()与_exit()函数的区别