【Linux】初識程式!!!
概念:程式的一個執行例項。
在Linux裡面有專門用來描述程式狀態的結構task_struct
,在系統核心裡面。這個通常被稱為PCB,著這個裡面包含著這個程式的所有資訊。
pid:在描述程式的結構體PCB裡面有一個pid,這個是描述程式ID的,通過這個ID就可以用來區分父程式和子程式。
另外,`getpid()`函式用來獲得當前程式的ID,`getppid()`用來當前程式的父程式ID
使用者自定義程式 fork()
:
當使用者使用fork()
時候,呼叫一次,但是返回值有兩個,子程式的返回值是0,父程式的返回值是自己成的ID,即pid。
這個子程式的所有資源都是父程式的副本,但是父程式和子程式自己的資源完全私有,不共享。
即,在建立子程式的時候將父程式的PCB、資料段、堆疊資源複製一份給子程式。
pid_t fork(void);
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
pid_t pid;
printf("begin fork()\n");
pid = fork();
if(pid == -1)
{
perror("fork:");
exit(1);
}
if(pid == 0)
{
printf("I'm child\n");
}
else
printf("I'm parent\n");
return 0;
}
結果
可以看到這個程式將子程式和父程式的結果,但是在這裡面子程式和父程式的執行先後順序是不固定的,這個和核心的排程演算法有關。
程式的狀態:
在系統執行每一個進層的時候並不是一次執行所有的程式,而是分片執行的。即將每一個程式都分為很多的片,系統在排程演算法的排程下,每次都只執行一個程式的一部分。因為CPU執行的速度非常快,所以對人的感覺是每次都在執行所有的程式。
如圖
當一個程式進入死亡狀態之前會有一段殭屍狀態,在殭屍狀態之前會一直佔用該程式的資源,只到父程式獲得該程式的退出碼。如果一個程式裡面殭屍態的程式太多的話,就會佔用太多的資源,甚至可能導致程式崩潰。
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
pid_t pid;
printf("begin fork!\n");
pid = fork();
if(pid == -1)
{
perror("fork():");
exit(1);
}
if(pid > 0)
{
printf("sleeping...\n");
sleep(30);
}
else
{
printf("child is begin\n");
exit(0);
}
return 0;
}
在程式裡面父程式睡眠,子程式實行後立即退出。在子程式退出父程式睡眠的時間裡面,那麼這個子程式就是進入殭屍狀態。
這個時候如果使用kill -9 殭屍程式號
那麼這個kill
指令是殺死不了殭屍程式的,因為在殭屍程式裡面的程式已經是一個死程式。所以在程式裡面需要避免存在太多的殭屍程式。
檢視程式ps -l
UID:當前被執行者身份
PID:當前程式的ID
PPID:當前程式的父程式ID
PRI:程式的優先順序,PRI值越小表示越早被執行
NI:當前程式的nice值
設定nice值:
在程式啟動之前設定nice值:nice -n -5 ./test
將test程式的nice值設定為5
在程式啟動之後設定nice值:renice -5 -p pid
將pid所表示的程式的nice設定為5
相關文章
- 初識shell程式設計程式設計
- 初識Linux教程:Linux基礎(轉)Linux
- Linux日誌服務初識Linux
- 初識Linux目錄結構Linux
- 初識Linux核心-DIY核心模組Linux
- 第二課初識PHP程式PHP
- 講講我與Linux的初識Linux
- 第一章 初識 LinuxLinux
- 初識shell指令碼程式設計指令碼程式設計
- Linux基礎入門(一)初識ShellLinux
- Python GUI介面程式設計-初識PythonGUI程式設計
- 初識C#網路程式設計C#程式設計
- NNLM初認識以及相關程式碼
- 初識Linux核心-和CMOS打電話Linux
- 初識程式(一)——作業系統,程式管理,程式狀態作業系統
- 初識MybatisMyBatis
- 初識 DockerDocker
- rocketmq初識MQ
- 初識 reduxRedux
- 初識GitGit
- Express初識Express
- Kafka 初識Kafka
- 初識 “HTML”HTML
- 初識GolangGolang
- 初識dockerDocker
- 初識RedisRedis
- 初識GOGo
- 初識promisePromise
- 初識VueVue
- 初識JSJS
- 初識jQueryjQuery
- 初識JavaScriptJavaScript
- 初識WebAssemblyWeb
- 初識機器學習機器學習
- 初識JVMJVM
- 初識HaphoopOOP
- 初識JavaWEBJavaWeb
- 初識HTTPHTTP