linux操作系統之進程組及會話

(1)進程組(作業):代表一個或多個進程的集合。

? ? ? ? ? 1)父進程創建子進程時,默認子進程與父進程屬于同一進程組,進程組id==第一個進程id(組長id,父進程id)

? ? ? ? ? 2)使用kill -SIGKILL -進程組id(負數)? 將整個進程組殺死。

? ? ? ? ? 3)只有進程組中還有進程存在,進程組就一直存在,與組長進程是否終止無關。

? ? ? ? ? 4)進程組生存周期為進程組中最后一個進程存活時間。

? ? ? ? ? 5)一個進程可以為自己或子進程設置進程組id(setpgid)

(2)進程組操作函數

? ? ? ? ?1)獲取當前進程的進程組id:getpgrp

? ? ? ? ? ? ? ? ? ? ?pid_t? getpgrp(void);? ? ? ? ? ?//返回調用者的進程組ID

? ? ? ? ?2)獲取指定進程的進程組id:getpgid

? ? ? ? ? ? ? ? ? ? pid_t? getpgid(pid_t pid);? ?//成功返回0,失敗返回-1

? ? ? ? ? ? ? ? ? ? ? ? ?pid=0時,該函數效果和getpgrp作用相同

? ? ? ? 3)改變進程組默認所屬進程組:setpgid(通常用來加入一個現有的進程組或創建一個新進程組)

? ? ? ? ? ? ? ? ? ?int? setpgid(pid_t pid ,pid_t pgid);? 成功:0 失敗:-1

? ? ? ? ? ? ? ? ? ? ? 功能:將pid加入到pgid中

? ? ? ? ? ? ? 注意事項:1>如果想要把子進程設置為新的組,應把setpgid放在fork函數之后,exec函數(執行完后不返回了)之前。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2>改變進程組只有在符合自己權限的情況下才能改變。

(3)會話:一個或多個進程組的集合

? ? ? ? ? 1)創建會話

? ? ? ? ? ? ? ? ? 1>創建會話的進程不能使進程組的組長,如果是組長進程,則會出錯

? ? ? ? ? ? ? ? ? 2>創建會話的進程會成為新進程組的組長進程

? ? ? ? ? ? ? ? ? 3>一般linux需要root權限(ubuntu不需要)

? ? ? ? ? ? ? ? ? 4>新會話會舍棄原有的控制終端,該會話沒有控制終端

? ? ? ? ? ? ? ? ? 5>建立新會話的順序,先調用fork,父進程終止,子進程調用setsid函數創建會話,稱為進程組組長和會話的會長。

? ? ? ? ? 2)會話操作函數

? ? ? ? ? ? ? ? 1>獲取進程組所屬會話id:getsid

? ? ? ? ? ? ? ? ? ? ? pid_t getsid(pid_t pid)? 成功:返回調用進程的會話id? 失敗:-1

? ? ? ? ? ? ? ? ? ? ? ? ? ?pid=0? ? 查看當前進程的會話id

? ? ? ? ? ? ? ? ? ?ps ajx? ?參數j代表與控制作業相關的信息,參數a代表所有用戶的進程,參數x代表所有控制終端和無控制終端的進程。

? ? ? ? ? ? ? ?2>創建一個新會話,并將自己的id設置為進程組id和新會話id:setsid

? ? ? ? ? ? ? ? ? ? pid_t setsid(void)??成功:返回調用進程的會話id? 失敗:-1

? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ??3)會話的作用:創建守護(daemon精靈)進程

? ? ? ? ? ? ? ?1>守護進程的定義:linux后臺服務進程,通常獨立與控制終端并且周期性地執行某種任務或等待處理某些發生的事情,一般采用以d結尾的名字。

? ? ? ? ? ? ? ?2>守護進程的特點:沒有控制終端,不能直接和用戶交互,不受用戶登錄、注銷的影響,一直運行著。

? ? ? ? ? ? ? ?3>創建守護進程的流程:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1》創建子進程,父進程退出,所有工作都在子進程中進行形式上體力子控制終端。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2》在子進程中創建新會話(setsid函數),使子進程完全獨立出來,脫離控制。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3》改變當前目錄為根目錄(chdir函數),防止占用可卸載的文件系統(如掛載在/mnt下的U盤中的程序,就屬于可卸載)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4》重設文件權限掩碼(umask函數),防止繼承的文件創建某些屏蔽字拒絕某些權限,增加守護進程的靈活性。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5》關閉文件描述符,繼續的打開文件(0/1/2)不會用到,浪費系統資源,無法卸載,可以重定向到/dev/null文件下。?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6》開始執行守護進程核心工作,守護進程退出處理程序模型。

? ? ? ? ? 4>創建守護進程例子

? ? ? ? ? ? ? ? ? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382320.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382320.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

golang實現聊天室(二)

golang實現聊天室(二) 上一篇完成了服務端啟動監聽連接,客戶端建立連接,發一個消息,斷開連接。服務端收一下,然后服務端打印。 客戶端可以一直發送消息,服務端不停接收并打印 client func mai…

golang實現聊天室(三)

golang實現聊天室(三) 實現多個客戶端同時給服務端發送消息,服務端接受并打印出來 client1 func main() {var conn, err net.DialTimeout("tcp", "127.0.0.1:5888", 30*time.Second)if err ! nil {log.Fatal("conn…

linux操作系統之線程同步及互斥量

(1)線程同步 1)線程同步:指一個線程發出某一個功能運行時,在運行還沒有結束的時候,該調用不返回。同時其它線程為保證數據的一致性,不能調用該功能。 2)多個控制流共同操作一個共享資…

golang實現聊天室(四)

golang實現聊天室(四) 服務端給已經建立連接的客戶端發送消息 client1 func main() {var conn, err net.DialTimeout("tcp", "127.0.0.1:6888", 30*time.Second)if err ! nil {log.Fatal("conn error")}for {conn.Write…

linux操作系統之讀寫鎖

(1)讀寫鎖:只有一把鎖,但是有兩種狀態(讀,寫) 1)讀寫鎖的三種狀態:讀鎖,寫鎖,不加鎖 2)讀寫鎖特性(12字)&…

golang實現聊天室(五)

golang實現聊天室(五) 完成服務端廣播消息 server package mainimport ("fmt""log""math/rand""net" )type Client_list struct {list map[net.Conn]string }func main() {client_list : Client_list{make(map…

linux操作系統之條件變量

(1)條件變量 條件變量本身不是鎖,但它可以造成線程阻塞,通常與互斥鎖配合使用。 (2)條件鎖相關函數 pthread_cond_t類型,用于定義條件變量 1)初始化一個條件變量:pthrea…

7. 整數反轉 golang

官解 func reverse(x int) ( num int) {for x ! 0 {num num*10 x%10x x / 10}// 使用 math 包中定義好的最大最小值if num > math.MaxInt32 || num < math.MinInt32 {return 0}return }Me func reverse(x int) int {if x < 0 {return -1 * reverse_fun(-x)} else…

linux操作系統之信號量、互斥量在進程間的同步、文件鎖

&#xff08;1&#xff09;信號量&#xff1a;進化版的互斥量 多個線程間對某個對象的部分數據進行共享&#xff0c;使用互斥鎖是沒有辦法實現的&#xff0c;只能將整個數據對象鎖住。這樣雖然達到了多線程操作數據共享的目的&#xff0c;卻導致線程并發性下降。 信號量&#x…

linux網絡編程之網絡應用設計模式、分層模型、通信過程

&#xff08;1&#xff09;網絡協議 可以理解為規則&#xff0c;其中包含著數據傳輸和數據的解釋。 典型的協議&#xff1a;傳輸層&#xff1a;tcp/udp協議&#xff0c;應用層&#xff1a;http/ftp協議&#xff0c;網絡層&#xff1a;ip協議&#xff0c;網路接口&#xff1a;ar…

680. 驗證回文字符串 Ⅱ golang

題目 驗證回文字符串 Ⅱ 給定一個非空字符串 s&#xff0c;最多刪除一個字符。判斷是否能成為回文字符串。 示例 1: 輸入: “aba” 輸出: True 示例 2: 輸入: “abca” 輸出: True 解釋: 你可以刪除c字符。 注意: 字符串只包含從 a-z 的小寫字母。字符串的最大長度是50000…

linux網絡編程之通信協議格式

好文參考&#xff1a;《網路傳輸的三張表&#xff1a;MAC地址表&#xff0c;ARP緩存表和路由表》http://www.cnblogs.com/clovn/p/4911212.html &#xff08;1&#xff09;數據包封裝 傳輸層及其一下的機制由內核決定&#xff0c;主要負責通訊的具體細節&#xff1b;應用層由用…

88. 合并兩個有序數組 golang

88. 合并兩個有序數組 給你兩個有序整數數組 nums1 和 nums2&#xff0c;請你將 nums2 合并到 nums1 中&#xff0c;使 nums1 成為一個有序數組。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。 你可以假設 nums1 有足夠的空間&#xff08;空間大小大于或等于 m …

linux網絡編程之Socket編程

&#xff08;1&#xff09;socket套接字 1&#xff09;在linux環境下&#xff0c;socket用于表示進程間網絡通信的特殊文件類型&#xff0c;其本質是內核借助緩沖區形成的偽文件&#xff08;不占磁盤空間&#xff0c;除此之外還有二進制文件&#xff0c;管道&#xff0c;字符文…

Linux操作系統之簡易實現server/client

1.首先將出錯處理封裝成函數&#xff0c;具體封裝思想&#xff1a;是在底層函數的基礎上將首字母大寫&#xff08;方便在編程中查找函數文件的manpage,而不需要使用命令&#xff0c;直接用shiftk&#xff09;,然后調用底層庫函數并考慮出錯處理&#xff0c;具體函數如下&#x…

75. 顏色分類 golang

https://leetcode-cn.com/problems/sort-colors/solution/75-yan-se-fen-lei-golang-by-hodgekou/ Me func sortColors(nums []int) {sort.Ints(nums) }tips package mainimport ("fmt""sort" )//定義interface{},并實現sort.Interface接口的三個方法 ty…

linux網絡編程之TCP三次握手和四次揮手

1.在TCP連接的過程中&#xff0c;有三個階段&#xff0c;分別是建立連接&#xff0c;傳遞數據和斷開連接&#xff0c;通訊時序圖如下所示: 2.結合TCP數據報格式分析建立連接的三次握手 1&#xff09;首先客戶端發送一個帶有SYN標志的TCP報文給服務器端&#xff0c;詢問服務器端…

451. 根據字符出現頻率排序golang

官解 func frequencySort(s string) string {charMap : make(map[rune]int)arr : make([]string, len(s))for _,c : range s {charMap[c]}for k,v : range charMap {arr[v - 1] strings.Repeat(string(k), v)}r : ""for _,c : range arr {r c r}return r }自定義排…

linux網路編程之多進程并發服務器

1&#xff09;使用多進程并發服務器考慮的因素&#xff1a; &#xff08;1&#xff09;父進程描述最大文件描述符的個數&#xff08;父進程需要關閉accept返回的新文件描述符&#xff09; &#xff08;2&#xff09;系統內可創建進程的個數&#xff08;與內存大小相關&#xff…

69. x 的平方根 golang

Me https://leetcode-cn.com/problems/sqrtx/submissions/ func mySqrt(x int) int {return int(math.Sqrt(float64(x))) }