初學linux的fork筆記
fork函式用來建立linux程式,使用前需要標頭檔案 #include <unistd.h>,函式原型如下:
pid_t fork(void);
執行命令後會建立一個與呼叫程式相同的程式,呼叫程式稱為父程式,新建的程式稱為子程式。兩個程式有如下一些特點:
1、在父程式中該函式返回子程式的ID號,在子程式中函式返回0;
2、子程式與父程式的全域性變數名稱和地址相同,但是實際對應的實體地址是不同的;
3、子程式是父程式的拷貝,雖然不是完全繼承父程式的狀態,但是隻要是能夠繼承的在fork之前執行過的程式碼也相當於子程式執行了一次,舉例如下:
在下面的程式碼中,在判斷pid之前建立了共享記憶體空間,所以在fork之後子程式可以直接使用buffer訪問共享空間。如果是在if判斷pid之後的程式裡建立,則需要在另一個程式程式碼中加入獲取共享記憶體地址的程式碼進行對映。
uint8_t* buffer
int main()
{
pid_t pid;
shmid = shmget(0x2234,sizeof(uint8_t)*TX_BUFFER_SIZE,IPC_CREAT|0666);
printf("shmid = %d\n",shmid);
buffer=shmat(shmid,NULL,0);
pid = fork();
printf("pid is %d\n",pid);
if(pid == 0)
{
child_pro();
}
else
{
father_pro();
}
return 0;
}
共享記憶體涉及的標頭檔案有#include <sys/ipc.h>、#include <sys/shm.h>、#include <sys/types.h>
多核系統中,程式預設在多個核心執行,根據需求可以指定程式在特定的核心上執行。使用前需要標頭檔案#include <sched.h>和巨集定義 #define _GNU_SOURCE。
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(1,&mask);
sched_setaffinity(0,sizeof(cpu_set_t),&mask);
函式原型如下:
int sched_setaffinity(pid_t pid, size_t cpusetsize,cpu_set_t *mask);
pid:程式pid,如果是0表示本程式;
cpusetsize:通常為sizeof(cpu_set_t);
mask:
使用taskset -p <PID>可以檢視PID程式的affinity mask,數字的二進位制中1的位就表示該程式跑的核心。
taskset -pc <core> <PID> 指定PID在core上執行。
標頭檔案說明:
#define _GNU_SOURCE
#include<stdio.h> //標準輸入輸出
#include<unistd.h> //posix標準api
#include<sys/types.h> //_LP64 和 _ILP32 的定義
#include<sched.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<sys/shm.h>
#include<sys/ipc.h>
相關文章
- 初學Golang的筆記Golang筆記
- 學習筆記—給Linux初學者的建議筆記Linux
- 強化初學筆記筆記
- C++類初學筆記C++筆記
- 安卓初學基礎學習筆記安卓筆記
- 【Nginx學習筆記】-初識NginxNginx筆記
- 【自用】彙編初學筆記 #1筆記
- JVM學習筆記——初識JVMJVM筆記
- Scala 學習筆記 (1):初見筆記
- 基於docker 初學 MongoDb 學習筆記DockerMongoDB筆記
- [寒假學習筆記](二)Python初學筆記Python
- Linux C++ 自學筆記之二<菜鳥初學系列> (轉)LinuxC++筆記
- Python 裝飾器初學筆記Python筆記
- LevelDB學習筆記 (1):初識LevelDB筆記
- 從Python到Go:初學筆記PythonGo筆記
- Redis學習筆記(一)——初識RedisRedis筆記
- MongDB學習筆記(一) 初遇篇筆記
- 初級英語學習筆記01筆記
- Python學習筆記(一)——初學PythonPython筆記
- XML初學進階學習筆記(1)(轉)XML筆記
- XML初學進階學習筆記(5)(轉)XML筆記
- XML初學進階學習筆記(4)(轉)XML筆記
- XML初學進階學習筆記(3)(轉)XML筆記
- XML初學進階學習筆記(2)(轉)XML筆記
- Linux fork 炸彈解析,Linux Fork BombLinux
- Linux學習筆記Linux筆記
- Linux 學習筆記Linux筆記
- 初賽筆記筆記
- 我的 golang 學習筆記系列四:反射初識Golang筆記反射
- Vue 學習筆記 (一) -- 初識 VueCli 3Vue筆記
- substrate學習筆記1:Substrate初體驗筆記
- HTTP Client 學習筆記 (一) 初遇篇HTTPclient筆記
- Java學習筆記--資料庫初識Java筆記資料庫
- 卡片電腦PINE64初學筆記筆記
- 初識C語言(01)—學習筆記C語言筆記
- Linux與DNS的學習筆記LinuxDNS筆記
- 初學Docker容器網路不得不看的學習筆記Docker筆記
- Linux fork程式的用法Linux