#### 1.進程vs程序
編寫完畢的代碼,在沒有運行的時候,稱之為**程序**
正在運行著的代碼,就成為**進程**
進程,出了包含代碼意外,還有需要運行的環境,所以和程序是有區別的
#### 2.fork()
python的os模塊封裝了常見的系統調用,其中就包括fork,可以再python程序中輕松創建進程:
~~~
import os
# 注意,fork函數,只在Unix/Linux/Mac上運行,windows不可以
pid = os.fork()
if pid == 0:
print('哈哈1')
else:
print('哈哈2')
~~~
>[warning] 說明
>程序執行到os.fork()時候,操作系統會創建一個新的進程(子進程),然后復制父進程的所有信息到子進程中
>* * * * *
>然后付進程和子進程都會從fork()函數中得到一個返回自,在子進程中這個值一定是0,而父進程中是子進程的id號
在unix/linux操作系統中,提供了以個fork()系統函數,他非常特殊.
普通函數調用.條用一次,返回一次,但是fork()調用一次,返回兩次,因為操作系統自動把當前進程(稱為父進程)復制了一份(稱為子進程),然后,分別在父進程和子進程內返回.
子進程永遠返回0,而父進程返回子進程的ID
這樣做的理由是,一個父進程可以fork()出很多子進程,所以,父進程要記下每個子進程的id,而子進程只需要調用getppid()就可以拿到父進程的id
#### 3.getpid(),getppid()
~~~
import os
rpid = os.fork()
if rpid<0:
print("fork調用失敗。")
elif rpid == 0:
print("我是子進程(%s),我的父進程是(%s)"%(os.getpid(),os.getppid()))
x+=1
else:
print("我是父進程(%s),我的子進程是(%s)"%(os.getpid(),rpid))
print("父子進程都可以執行這里的代碼")
~~~
運行結果:
~~~
我是父進程(19360),我的子進程是(19361)
父子進程都可以執行這里的代碼
我是子進程(19361),我的父進程是(19360)
父子進程都可以執行這里的代碼
~~~
- 系統編程
- 1.進程
- 1.1.fork
- 1.2.多個進程能否修改全局變量
- 1.3多次fork的問題
- 1.4.進程的創建-multiprocessing
- 1.5.進程的創建-Process子類
- 1.6.進程池Pool
- 1.7.進程間通信--Queue
- 2.線程
- 2.1.多線程-Threading
- 2.2.threading注意點
- 2.3.多線程-共享全局變量
- 2.4.線程和進程的對比
- 2.5.同步
- 2.6.互斥鎖
- 2.7.多線程-非共享數據
- 2.8.死鎖
- 2.9.同步應用
- 2.10.生產者與消費者模式
- 2.11.ThreadLocal
- 2.12.異步
- 2.13.GIL的問題
- 網絡編程
- 1.網絡概述-udp
- 1.1.TCP/IP
- 1.2.端口
- 1.3.ip地址
- 1.4.socket簡介
- 1.5.UDP介紹
- 1.6.udp網絡程序-發送數據
- 1.7.udp網絡程序-發送、接收數據
- 1.8.udp網絡程序-端口問題
- 1.9.udp綁定信息
- 2.0.udp網絡通信過程
- 2.1.udp應用:echo服務器
- 2.2.udp應用:聊天室
- 2.3.udp總結
- 2.4.udp綜合-模擬QQ
- 2.TFTP下載和上傳
- 3.TCP/IP
- 3.1.打開瀏覽器訪問百度的過程
- web服務器
- 1.1.MyWebServer.py
- 1.2.MyWebFramework.py
- 正則
- 1.1.re模塊
- 1.2.字符
- 1.3.原始字符串
- 1.4.表示數量
- 1.5.表示邊界
- 1.6.匹配分組
- 1.7.貪婪和非貪婪
- 數據結構和算法
- 1.引入概念
- 1.1.第一次嘗試
- 1.2.算法的提出
- 1.3.第二次嘗試
- 1.4.算法效率衡量
- 1.5.算法分析
- 1.6.常見時間復雜度
- 1.7.python內置類型性能分析
- 1.8.數據結構
- 2.順序表
- 2.1.順序表的形式
- 2.2.順序表的結構和實現
- 2.3.順序表的操作
- 2.4.python中的順序表
- 3.鏈表
- 3.1.單向鏈表
- 3.2.單向循環鏈表
- 3.3.雙向鏈表
- 4.棧
- 4.1.棧的結構實現
- 5.隊列
- 5.1.隊列的實現
- 5.2.雙端隊列
- 6.排序和搜索
- 6.1.冒泡排序
- 6.2.選擇排序
- 6.3.插入排序
- 6.4.快速排序
- 6.5.哈希排序
- 6.6.歸并排序
- 6.7.常見排序算法效率比較
- 6.8.搜索
- 7.樹與樹算法
- 7.1.二叉樹
- 7.2.二叉樹的遍歷
- 初識Django
- 1.小白
- 2.初次嘗試
- 3.管理站點
- 4.視圖
- 5.模板
- django模型
- 1.定義模型
- 2.模型成員
- 3.模型查詢
- 4.自連接
- django視圖
- django模板
- django高級
- django第三方
- django-git