方式psutil.WindowsService和psutil.Process工作略有不同,但一個有用的功能,它們都佔有率as_dict()
利用這一點,我得到的信息是更詳細:
{'username': '', 'start_type': 'automatic', 'display_name': 'Sync
Host_11e740b', 'name': 'OneSyncSvc_11e740b', 'binpath': 'C:\\WINDOWS\\sy
stem32\\svchost.exe -k UnistackSvcGroup', 'pid': 6492, 'status': 'running',
'description': 'This service synchronizes mail, contacts, calendar and
various other user data. Mail and other applications dependent on
this functionality will not work properly when this service is
not running.'}
我看到的Svchost它已經從UnistackSvcGroup運行,所以我打開任務管理器中找到它,看到在同一組
列出這些其他服務10如果您檢查UnistackSvcGroup下運行的任何用戶名,則所有這些用戶都將返回而不使用用戶名。
使用列出的共享PID來檢查在svchost下運行的所有服務,所有服務都不返回用戶名。你的代碼沒有問題。
單個進程與許多服務綁定,並在您的帳戶下運行,但服務本身正在您的系統中運行。這就是爲什麼服務不會返回用戶名,而svchost會將這些服務附加到您的帳戶本身。
這由@eryksun的意見進行了說明,以及:
「」 OneSyncSvc_ *」是Windows 10的新服務類型 - 每個用戶的服務實例共享進程中運行(即SERVICE_USER_SERVICE | SERVICE_WIN32_SHARE_PROCESS | SERVICE_USERSERVICE_INSTANCE)作爲在用戶的會話的用戶,而不是運行分離在會話0作爲系統或服務帳戶它出現在svchost進程所有服務實例具有相同的LUID(本地唯一ID)
後綴。
還有一個「OneSyncSvc」用戶服務模板(即SERVICE_USER_SERVICE | SERVICE_WIN32_SHARE_PROCESS )在「HKLM \ System \ CurrentControlSet \ Services」中定義。 SERVICE_WIN32_SHARE_PROCESS | | SERVICE_USERSERVICE_INSTANCE每個用戶的服務實例共享進程中運行(即`SERVICE_USER_SERVICE - 您可以通過SC QC OneSyncSvc「
‘OneSyncSvc_ *’是Windows 10的新服務類型的查詢其在命令行配置')作爲用戶的會話中的用戶,而不是在會話0中作爲SYSTEM或服務帳戶運行隔離,它顯示svchost進程中的所有服務實例都帶有相同的LUID(本地唯一ID)後綴 – eryksun
還有一個「OneSyncSvc 「在HKLM \ System \ CurrentControlSet \ Services中定義的用戶服務模板(即'SERVICE_USER_SERVICE | SERVICE_WIN32_SHARE_PROCESS')。你可以通過'sc qc OneSyncSvc'在命令行上查詢它的配置。 – eryksun
@eryksun那麼可以這樣說這樣的服務在當前登錄的用戶帳戶下運行? – R01k