初學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筆記
- python初學筆記Python筆記
- 強化初學筆記筆記
- C++類初學筆記C++筆記
- [寒假學習筆記](二)Python初學筆記Python
- Linux 學習筆記Linux筆記
- 當初自學C++時的筆記記錄C++筆記
- Linux fork程式的用法Linux
- JVM學習筆記——初識JVMJVM筆記
- 【自用】彙編初學筆記 #1筆記
- 從Python到Go:初學筆記PythonGo筆記
- Python 裝飾器初學筆記Python筆記
- 【Nginx學習筆記】-初識NginxNginx筆記
- 安卓初學基礎學習筆記安卓筆記
- 基於docker 初學 MongoDb 學習筆記DockerMongoDB筆記
- Linux與DNS的學習筆記LinuxDNS筆記
- Linux 學習筆記--程式Linux筆記
- Redis學習筆記(一)——初識RedisRedis筆記
- 初級英語學習筆記01筆記
- MongDB學習筆記(一) 初遇篇筆記
- LevelDB學習筆記 (1):初識LevelDB筆記
- 初賽筆記筆記
- 學習Python的日子 Linux筆記(1)PythonLinux筆記
- 我的 golang 學習筆記系列四:反射初識Golang筆記反射
- 【Linux學習筆記】reboot命令Linux筆記boot
- Linux 學習筆記--程式管理Linux筆記
- Vue 學習筆記 (一) -- 初識 VueCli 3Vue筆記
- 初識C語言(01)—學習筆記C語言筆記
- HTTP Client 學習筆記 (一) 初遇篇HTTPclient筆記
- substrate學習筆記1:Substrate初體驗筆記
- 當linux報 “-bash: fork: 無法分配記憶體”Linux記憶體
- 初學Docker容器網路不得不看的學習筆記Docker筆記
- 關於linux多執行緒fork的理解和學習Linux執行緒
- 初入webpack筆記Web筆記
- 筆記:初識Kafka筆記Kafka
- 筆記:初識Python筆記Python
- 初入linux記錄Linux
- linux學習筆記-day5Linux筆記