簡體   English   中英

如何在 linux 上的 dotnet c# 中查找正在運行的進程的進程 arguments

[英]How to find process arguments of running processes in dotnet c# on linux

我有一個程序需要在啟動時殺死它自己的任何其他實例。 在 windows 中,我可以通過按名稱獲取進程並搜索應用程序的 exe 來很好地做到這一點(沒有 WMI)(這是足夠獨特的,可以很好地工作)。 在 linux 中,它都是dotnet foo.dll所以每個 dotnet 應用程序都在運行dotnet二進制文件作為它的進程名稱。 我希望提取 dll 名稱的第一個參數,以區分dotnet進程並在 dotnet 二進制文件上找到具有相同 arguments 集的任何進程。

在使用 dotnet 的 windows 中(據我所知),通常的方法是使用 WMI 和 ManagementObjectSearcher,這很慢,但大部分都有效。 也可以導入一些windows函數,比如OpenProcess和NtQueryInformationProcess,這樣更快。

這些選項只是 windows,所以我正在尋找一種替代實現,它可以在 linux 中做類似的事情。 我知道在 linux shell 上,您可以很容易地(例如ps aux )找到全套 arguments 來啟動大多數進程。 因此,作為最后的手段,我可以將 shell 輸出到 ps aux,然后解析它,或者在 shell 一個班輪中進行整個自相殘殺。 但我寧願不依賴於不是絕對必要的地方,在 linux 中是否有替代方法?

要獲取進程 PID 的命令行,請閱讀/proc/PID/cmdline 當然,惡意進程可以在啟動后更改其命令行,但大多數不會。 cmdline 中的單詞將由 '\0' 分隔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM