亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

退出后任務從cgroup中移除

退出后任務從cgroup中移除

Go
臨摹微笑 2023-07-17 17:53:12
這是我的測試代碼。我想將當前PID寫入文件tasks:package subsystemsimport (  "io/ioutil"  "os"  "path"  "strconv"  "testing")func TestSubsystems(t *testing.T) {  p := "/sys/fs/cgroup/memory/test1"  f := "tasks"  err := os.MkdirAll(p, 0644)  if err != nil {    t.Log(err.Error())  }  pid := os.Getpid()  if err := ioutil.WriteFile(path.Join(p, f), []byte(strconv.Itoa(pid)), 0644); err != nil {    t.Failed()  }}但是當程序以代碼 0 退出時,我看不到任何內容tasks:root@ubuntu:/sys/fs/cgroup/memory/test1# cat tasksroot@ubuntu:/sys/fs/cgroup/memory/test1# cat tasksroot@ubuntu:/sys/fs/cgroup/memory/test1# 如何解決這個問題呢?
查看完整描述

1 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

你所描述的根本不是問題——這是一個正確的行為:

  • 您創建一個空的 cgroup;

  • 您向其添加任務;

  • 任務在cgroup中運行一段時間;

  • 任務退出;

  • 由于上一項的原因,該任務被從 cgroup 中刪除;

  • cgroup又空了;

  • 您觀察 cgroup 成員列表,但什么也沒看到。

為什么這是正確的行為?嗯,最簡單的答案是沒有理由將不存在的 PID 保留在 cgroup 成員列表中。另一方面,這樣做的原因有很多。

PID 重用是首先想到的原因之一:如果某個 PID 在任務死亡或正常關閉后沒有從 cgroup 中刪除,則稍后將重用該 PID 的任何其他任務(假設該 cgroup 仍然存在) alive) 將成為該組的成員,這顯然不是期望的行為,特別是當我們談論容器時(例如,如果我們談論 cgroup,這種行為可能是獲得特權的原因)devices。

正如我之前在評論中提到的,我在文檔中找不到對此行為的明確描述 - 可能是因為它感覺太明顯了,但源代碼是不言自明的:系統調用在exit(2)幕后執行,?cgroup_exit()此函數將任務移出其 cgroups。


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號