原创 21.有名管道fifo
1.特點 有名管道 在磁盤上有這樣一個文件,可通過命令ls -l查看前綴帶p的文件 僞文件,在磁盤上大小永遠爲0 在內核中有一個對應的緩衝區
原创 8.進程相關的命令ps和kill
ps: ps aux | grep "xxx" a:所有信息 u:用戶相關信息 x:顯示不依賴終端的進程 "xxx":與進程相關的關鍵詞,寫時不需要雙引號"" ps ajx | grep "xxx" j:
原创 20.設置匿名管道爲非阻塞
1.默認讀寫兩端均爲阻塞2.需要設置哪端爲非阻塞,就設置哪端,例如設置讀端爲非阻塞: 利用變參函數:fcntl 通過修改文件屬性的方式,即類似open的時候對應的flag屬性 先獲取原來的flags: int flags
原创 17.父子進程使用匿名管道通信的相關問題
1.單個進程能否使用匿名管道完成讀寫操作?答案:可以,但沒有意義。2.父子進程通信是否需要sleep函數?當以下情況發生時: 父進程寫--寫的慢 子進程讀--讀得快子進程需不需要sleep等待父進程寫完?答案:不需要,因爲讀操
原创 14.進程間通信(IPC)相關概念
1.什麼是IPC?進程間通信:InterProcess Communication,進程與進程間進行信息的交互。2.進程間通信常用的4種方式(介質)管道--簡單信號--系統開銷小共享映射區--有無血緣關係的進程間通信都可以本地套接字--穩
原创 23.mmap的注意事項
1.如果對mmap的返回值(ptr)做++操作(ptr++),munmap是否能夠成功? 不能 要想執行++操作,可以char* pt = ptr;2.如果open時O_RDONLY,mmap時prot參數指定PROT_READ |
原创 22.內存映射區mmap
1.mmap--創建內存映射作用:將磁盤文件的數據映射到進程虛擬地址空間中的動態庫加載區中,可以看成一塊虛擬內存,用戶通過修改內存就能修改磁盤文件函數原型:void* mmap(void* addr, // 映射區首地址,
原创 16.pipe函數創建匿名管道
int pipe(int fd[2]); fd--傳出參數 fd[0]--讀端 fd[1]--寫端用法: int fd[2]; pipe(fd); 點贊 收藏 分享 文章舉報
原创 10.exec函數族功能介紹
1.讓父子進程執行不相干的操作2.能夠替換進程虛擬地址空間中的源代碼.text段3.當前程序中調用另外一個應用程序,而不再執行原有的程序 首先想到exec之前需要fork4.實現換核不換殼的功能5.執行一個另外的程序不需要創建額外的虛擬
原创 13.wait函數和waitpid函數
點贊 收藏 分享 文章舉報 Disappear_XueChao 發佈了119 篇原創文章 · 獲贊 12 · 訪問量 2萬+ 私信
原创 12.孤兒進程和殭屍進程
1.孤兒進程:爹生孩子爹先死,孩子還活着,孩子叫孤兒進程孤兒進程會被init進程領養,init進程變爲孤兒進程的父親爲了釋放子進程佔用的資源: 進程結束之後,子進程能夠自行釋放虛擬地址空間中的用戶區空間 但是釋放不了pcb,必須由父進
原创 11.exec函數族函數的使用
這裏,就列舉兩個常用的函數:1.執行指定目錄下的程序 int execl(const char* path,const char* arg,...); path:要執行的程序的絕對路徑 變參arg:要執行的程序的需要的參數 第一a
原创 18.匿名管道的讀寫行爲
1.讀操作(1) 有數據 read返回讀出的字節數(2) 無數據 寫端全部關閉: read解除阻塞,返回0,相當於讀文件讀到了尾部 寫端沒有全部關閉: read阻塞2.寫操作(1) 讀端全部關閉 管道破裂,進程被終止,
原创 9.父子進程間的數據共享問題
進程剛執行fork之後,兩個虛擬地址空間的用戶區數據完全相同,如下圖所示: 如上圖所示,父子進程中都用一個變量(全局變量.data段)int num = 100,當兩個進程僅對該變量執行讀操作時,它們讀取的是物理內存中的同一區域。而當父
原创 24.mmap進程間通信
1.有血緣關係的 創建匿名和非匿名的映射區都可以 父子進程共享內存映射區2.沒有血緣關係的 不能使用匿名映射的方式 只能藉助磁盤文件創建映射區 不阻塞 點贊 收藏 分享 文章舉報