第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

從systemd啟動主進(jìn)程時無法分離子進(jìn)程

從systemd啟動主進(jìn)程時無法分離子進(jìn)程

Go
慕標(biāo)琳琳 2021-11-01 16:41:09
我想生成長時間運行的子進(jìn)程,這些子進(jìn)程在主進(jìn)程重新啟動/死亡時仍然存在。從終端運行時,這可以正常工作:$ cat exectest.gopackage mainimport (        "log"        "os"        "os/exec"        "syscall"        "time")func main() {        if len(os.Args) == 2 && os.Args[1] == "child" {                for {                           time.Sleep(time.Second)                }        } else {                cmd := exec.Command(os.Args[0], "child")                cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}                log.Printf("child exited: %v", cmd.Run())        }}$ go build$ ./exectest^Z[1]+  Stopped                 ./exectest$ bg[1]+ ./exectest &$ ps -ef | grep exectest | grep -v grep | grep -v vimsnowm     7914  5650  0 23:44 pts/7    00:00:00 ./exectestsnowm     7916  7914  0 23:44 ?        00:00:00 ./exectest child$ kill -INT 7914 # kill parent process[1]+  Exit 2                  ./exectest$ ps -ef | grep exectest | grep -v grep | grep -v vimsnowm     7916     1  0 23:44 ?        00:00:00 ./exectest child請注意,在父進(jìn)程被殺死后,子進(jìn)程仍然活著。但是,如果我像這樣從 systemd 啟動主進(jìn)程......[snowm@localhost exectest]$ cat /etc/systemd/system/exectest.service [Unit]Description=ExecTest[Service]                        Type=simpleExecStart=/home/snowm/src/exectest/exectestUser=snowm[Install]WantedBy=multi-user.target$ sudo systemctl enable exectestln -s '/etc/systemd/system/exectest.service' '/etc/systemd/system/multi-user.target.wants/exectest.service'$ sudo systemctl start exectest...然后當(dāng)我殺死主進(jìn)程時,孩子也死了:$ ps -ef | grep exectest | grep -v grep | grep -v vimsnowm     8132     1  0 23:55 ?        00:00:00 /home/snowm/src/exectest/exectestsnowm     8134  8132  0 23:55 ?        00:00:00 /home/snowm/src/exectest/exectest child$ kill -INT 8132$ ps -ef | grep exectest | grep -v grep | grep -v vim$怎樣才能讓孩子活下來?在 CentOS Linux release 7.1.1503 (Core) 下運行 go version go1.4.2 linux/amd64。
查看完整描述

3 回答

?
qq_遁去的一_1

TA貢獻(xiàn)1725條經(jīng)驗 獲得超8個贊

解決方法是添加

KillMode=process

到服務(wù)區(qū)。默認(rèn)值是control-group這意味著 systemd 清理任何子進(jìn)程。

來自man systemd.kill

KillMode= 指定如何終止該單元的進(jìn)程??刂平M、過程、混合、無之一。

如果設(shè)置為 control-group,則在 unit stop 時將殺死本單元 control group 中的所有剩余進(jìn)程(對于服務(wù):執(zhí)行 stop 命令后,如 ExecStop= 配置的那樣)。如果設(shè)置為 process,則只會殺死主進(jìn)程本身。如果設(shè)置為混合,則 SIGTERM 信號(見下文)被發(fā)送到主進(jìn)程,而隨后的 SIGKILL 信號(見下文)被發(fā)送到單元控制組的所有剩余進(jìn)程。如果設(shè)置為 none,則不會殺死任何進(jìn)程。在這種情況下,單元停止時只會執(zhí)行停止命令,否則不會殺死任何進(jìn)程。停止后還活著的進(jìn)程留在他們的控制組中,控制組在停止后繼續(xù)存在,除非它是空的。


查看完整回答
反對 回復(fù) 2021-11-01
?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊

如果KillMode由于某種原因你不能(像我一樣)改變服務(wù)的,你可以試試這個at命令(見man)。


您可以安排您的命令提前 1 分鐘運行。看一個例子:


# this will remove all .tmp files from "/path/" in 1 minute ahead (this task will run once)

echo rm /path/*.tmp | at now + 1 minute


查看完整回答
反對 回復(fù) 2021-11-01
?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊

據(jù)我所知,解決這個問題的唯一可行方法是使用不同的 cgroup 啟動子進(jìn)程。您可以使用 systemd-run 命令和 --slice 參數(shù)來做到這一點。

systemd-run --user --scope --slice=app-firefox firefox

更改 KillMode 還意味著如果您的主進(jìn)程崩潰,并且任何子進(jìn)程仍在運行,systemd 將不會重新啟動它。


查看完整回答
反對 回復(fù) 2021-11-01
  • 3 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號