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

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

如何檢查后臺啟動的進(jìn)程是否仍在運(yùn)行?

如何檢查后臺啟動的進(jìn)程是否仍在運(yùn)行?

Go
慕婉清6462132 2023-07-10 14:47:11
看起來如果您通過exec.Cmd和Start()創(chuàng)建一個子進(jìn)程,該Cmd.Process字段會立即填充,但Cmd.ProcessState字段會保留nil到進(jìn)程退出為止。?// ProcessState contains information about an exited process,? ?// available after a call to Wait or Run.? ?ProcessState *os.ProcessStateStart()所以看起來我實(shí)際上無法檢查我編輯的進(jìn)程仍在運(yùn)行時的狀態(tài)?ProcessState當(dāng)進(jìn)程退出時,設(shè)置對我來說毫無意義。在這種情況下,有一個ProcessState.Exited()方法將始終返回true。所以我嘗試走這條路線:cmd.Process.Pidfield 在 I 之后就存在cmd.Start(),但是看起來os.Process沒有公開任何機(jī)制來檢查進(jìn)程是否正在運(yùn)行。os.FindProcess說:在 Unix 系統(tǒng)上,F(xiàn)indProcess 始終成功并返回給定 pid 的進(jìn)程,無論該進(jìn)程是否存在。這是沒有用的——而且似乎沒有辦法從os.Process轉(zhuǎn)到os.ProcessState除非你.Wait()違背了整個目的(我想知道進(jìn)程在退出之前是否正在運(yùn)行)。
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個贊

我認(rèn)為你在這里有兩個合理的選擇:

  • 分離一個等待進(jìn)程退出的 goroutine。等待完成后,您就知道進(jìn)程已退出。(正面:很容易正確編碼;負(fù)面:你專門有一個操作系統(tǒng)線程來等待。)

  • syscall.Wait4()在已發(fā)布的Pid.?A?Wait4with?syscall.WNOHANGset 立即返回,填寫狀態(tài)。

如果有一個導(dǎo)出的函數(shù)oscmd函數(shù)可以為您執(zhí)行此操作Wait4并填充 ProcessState,那就太好了。您可以提供WNOHANG也可以不提供,只要您認(rèn)為合適即可。但沒有。


要點(diǎn)ProcessState.Exited()是區(qū)分所有各種可能性,包括:

  • 進(jìn)程正常退出(帶有狀態(tài)字節(jié))

  • 進(jìn)程因接收到未處理的信號而終止

請注意,還有比這兩種更多的可能性......只是似乎沒有辦法讓其他人進(jìn)入ProcessState.?唯一的調(diào)用syscall.Wait似乎是:

  • syscall/exec_unix.go:失敗后exec,在返回錯誤之前收集僵尸;和

  • os/exec_unix.go: 撥打電話后p.blockUntilWaitable().

如果不是blockUntilWaitable,的exec_unix.go實(shí)現(xiàn)變體wait()可以調(diào)用syscall.Wait4with?syscall.WNOHANG,但blockUntilWaitable它本身確保這是毫無意義的(并且這個特定的目標(biāo)wait是無論如何都要等待退出)。


查看完整回答
反對 回復(fù) 2023-07-10
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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