C# 使用Mono在Ubuntu中获取进程信息

C# 使用Mono在Ubuntu中获取进程信息,c#,ubuntu,mono,C#,Ubuntu,Mono,我正在使用MonoC#和MonoDevelop从Ubuntu中的/proc/stat读取系统信息。但是当我使用FileInfo时,我得到的长度是0,而我使用StreamReader得到的是空字符串(edit:oops,关于StreamReader不工作的那一点被证明是不真实的)。如何打开文件并读取数据 顺便说一句,当我使用终端时,运行“cat/proc/stat”我可以得到数据。我需要配置MonoDevelop以正确访问吗 我找了一整天都没找到 我使用strace获得以下诊断信息: Proces

我正在使用MonoC#和MonoDevelop从Ubuntu中的/proc/stat读取系统信息。但是当我使用FileInfo时,我得到的长度是0,而我使用StreamReader得到的是空字符串(edit:oops,关于StreamReader不工作的那一点被证明是不真实的)。如何打开文件并读取数据

顺便说一句,当我使用终端时,运行“cat/proc/stat”我可以得到数据。我需要配置MonoDevelop以正确访问吗

我找了一整天都没找到

我使用strace获得以下诊断信息:

Process 2430 attached - interrupt to quit
read(0, "\n", 1024)                     = 1
gettimeofday({1362231405, 892525}, NULL) = 0
gettimeofday({1362231405, 893679}, NULL) = 0
gettimeofday({1362231405, 893917}, NULL) = 0
gettimeofday({1362231405, 894218}, NULL) = 0
gettimeofday({1362231405, 894372}, NULL) = 0
gettimeofday({1362231405, 894598}, NULL) = 0
gettimeofday({1362231405, 894722}, NULL) = 0
gettimeofday({1362231405, 895283}, NULL) = 0
gettimeofday({1362231405, 895466}, NULL) = 0
gettimeofday({1362231405, 895670}, NULL) = 0
gettimeofday({1362231405, 895801}, NULL) = 0
gettimeofday({1362231405, 896040}, NULL) = 0
gettimeofday({1362231405, 896242}, NULL) = 0
gettimeofday({1362231405, 897729}, NULL) = 0
gettimeofday({1362231405, 897898}, NULL) = 0
gettimeofday({1362231405, 898337}, NULL) = 0
gettimeofday({1362231405, 898481}, NULL) = 0
gettimeofday({1362231405, 898941}, NULL) = 0
gettimeofday({1362231405, 899116}, NULL) = 0
gettimeofday({1362231405, 900025}, NULL) = 0
gettimeofday({1362231405, 900163}, NULL) = 0
gettimeofday({1362231405, 900562}, NULL) = 0
gettimeofday({1362231405, 900721}, NULL) = 0
gettimeofday({1362231405, 900952}, NULL) = 0
gettimeofday({1362231405, 901109}, NULL) = 0
gettimeofday({1362231405, 901409}, NULL) = 0
gettimeofday({1362231405, 901534}, NULL) = 0
gettimeofday({1362231405, 902604}, NULL) = 0
write(1, "\n", 1)                       = 1
gettimeofday({1362231405, 902943}, NULL) = 0
gettimeofday({1362231405, 903281}, NULL) = 0
gettimeofday({1362231405, 903473}, NULL) = 0
gettimeofday({1362231405, 903724}, NULL) = 0
gettimeofday({1362231405, 903849}, NULL) = 0
gettimeofday({1362231405, 904343}, NULL) = 0
gettimeofday({1362231405, 904488}, NULL) = 0
gettimeofday({1362231405, 905391}, NULL) = 0
gettimeofday({1362231405, 905751}, NULL) = 0
gettimeofday({1362231405, 906501}, NULL) = 0
mprotect(0xb7216000, 4096, PROT_NONE)   = 0
tgkill(2430, 2432, SIGRT_3)             = 0
send(3, "\0\0\0\35\0\0\0e\0@d\2\0\0\0\1\f\0\0\0\10\0\0\0\1\0\0\0\216", 29, 0) = 29
futex(0x832fde4, FUTEX_WAIT_PRIVATE, 123, NULL) = 0
futex(0x832fdbc, FUTEX_WAKE_PRIVATE, 1) = 0
gettimeofday({1362231405, 909583}, NULL) = 0
gettimeofday({1362231405, 909900}, NULL) = 0
gettimeofday({1362231405, 910150}, NULL) = 0
gettimeofday({1362231405, 910444}, NULL) = 0
gettimeofday({1362231405, 910665}, NULL) = 0
gettimeofday({1362231405, 910957}, NULL) = 0
gettimeofday({1362231405, 911207}, NULL) = 0
gettimeofday({1362231405, 911632}, NULL) = 0
gettimeofday({1362231405, 911769}, NULL) = 0
gettimeofday({1362231405, 914613}, NULL) = 0
gettimeofday({1362231405, 914716}, NULL) = 0
gettimeofday({1362231405, 914840}, NULL) = 0
gettimeofday({1362231405, 915021}, NULL) = 0
gettimeofday({1362231405, 915133}, NULL) = 0
gettimeofday({1362231405, 915199}, NULL) = 0
gettimeofday({1362231405, 915397}, NULL) = 0
gettimeofday({1362231405, 915474}, NULL) = 0
gettimeofday({1362231405, 915606}, NULL) = 0
gettimeofday({1362231405, 915671}, NULL) = 0
gettimeofday({1362231405, 916001}, NULL) = 0
gettimeofday({1362231405, 916076}, NULL) = 0
gettimeofday({1362231405, 916232}, NULL) = 0
mprotect(0xb7216000, 4096, PROT_NONE)   = 0
tgkill(2430, 2432, SIGRT_3)             = 0
send(3, "\0\0\0\35\0\0\0f\0@d\2\0\0\0\1\f\0\0\0\10\0\0\0\1\0\0\0\217", 29, 0) = 29
futex(0x832fde4, FUTEX_WAIT_PRIVATE, 125, NULL) = 0
futex(0x832fdbc, FUTEX_WAKE_PRIVATE, 1) = 0
gettimeofday({1362231405, 918417}, NULL) = 0
gettimeofday({1362231405, 918589}, NULL) = 0
gettimeofday({1362231405, 918656}, NULL) = 0
gettimeofday({1362231405, 918780}, NULL) = 0
gettimeofday({1362231405, 918845}, NULL) = 0
gettimeofday({1362231405, 919729}, NULL) = 0
gettimeofday({1362231405, 919810}, NULL) = 0
gettimeofday({1362231405, 920057}, NULL) = 0
mprotect(0xb7216000, 4096, PROT_NONE)   = 0
tgkill(2430, 2432, SIGRT_3)             = 0
send(3, "\0\0\0\35\0\0\0g\0@d\2\0\0\0\1\f\0\0\0\10\0\0\0\1\0\0\0\221", 29, 0) = 29
futex(0x832fde4, FUTEX_WAIT_PRIVATE, 127, NULL) = 0
futex(0x832fdbc, FUTEX_WAKE_PRIVATE, 1) = 0
gettimeofday({1362231405, 921916}, NULL) = 0
gettimeofday({1362231405, 923160}, NULL) = 0
gettimeofday({1362231405, 923235}, NULL) = 0
gettimeofday({1362231405, 923442}, NULL) = 0
gettimeofday({1362231405, 923511}, NULL) = 0
gettimeofday({1362231405, 923631}, NULL) = 0
stat64("/proc/stat", {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
lstat64("/proc/stat", {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
gettimeofday({1362231405, 924059}, NULL) = 0
gettimeofday({1362231405, 925596}, NULL) = 0
gettimeofday({1362231405, 925692}, NULL) = 0
gettimeofday({1362231405, 926101}, NULL) = 0
gettimeofday({1362231405, 926169}, NULL) = 0
gettimeofday({1362231405, 926331}, NULL) = 0
gettimeofday({1362231405, 926397}, NULL) = 0
gettimeofday({1362231405, 926567}, NULL) = 0
gettimeofday({1362231405, 926634}, NULL) = 0
gettimeofday({1362231405, 926812}, NULL) = 0
gettimeofday({1362231405, 926881}, NULL) = 0
gettimeofday({1362231405, 927064}, NULL) = 0
gettimeofday({1362231405, 927133}, NULL) = 0
gettimeofday({1362231405, 929830}, NULL) = 0
gettimeofday({1362231405, 929928}, NULL) = 0
gettimeofday({1362231405, 930219}, NULL) = 0
gettimeofday({1362231405, 930288}, NULL) = 0
gettimeofday({1362231405, 930468}, NULL) = 0
gettimeofday({1362231405, 930535}, NULL) = 0
gettimeofday({1362231405, 930685}, NULL) = 0
gettimeofday({1362231405, 930758}, NULL) = 0
gettimeofday({1362231405, 931120}, NULL) = 0
gettimeofday({1362231405, 931189}, NULL) = 0
gettimeofday({1362231405, 931454}, NULL) = 0
gettimeofday({1362231405, 931522}, NULL) = 0
gettimeofday({1362231405, 931919}, NULL) = 0
gettimeofday({1362231405, 932012}, NULL) = 0
gettimeofday({1362231405, 935736}, NULL) = 0
gettimeofday({1362231405, 935883}, NULL) = 0
gettimeofday({1362231405, 936099}, NULL) = 0
gettimeofday({1362231405, 936164}, NULL) = 0
gettimeofday({1362231405, 936392}, NULL) = 0
gettimeofday({1362231405, 936459}, NULL) = 0
gettimeofday({1362231405, 936590}, NULL) = 0
gettimeofday({1362231405, 936672}, NULL) = 0
gettimeofday({1362231405, 936858}, NULL) = 0
gettimeofday({1362231405, 936976}, NULL) = 0
gettimeofday({1362231405, 944184}, NULL) = 0
stat64("/proc", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
lstat64("/proc", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
gettimeofday({1362231405, 944471}, NULL) = 0
gettimeofday({1362231405, 944635}, NULL) = 0
gettimeofday({1362231405, 944701}, NULL) = 0
gettimeofday({1362231405, 944850}, NULL) = 0
gettimeofday({1362231405, 944917}, NULL) = 0
gettimeofday({1362231405, 945178}, NULL) = 0
gettimeofday({1362231405, 945252}, NULL) = 0
gettimeofday({1362231405, 945670}, NULL) = 0
stat64("/proc/stat", {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
lstat64("/proc/stat", {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
gettimeofday({1362231405, 945984}, NULL) = 0
gettimeofday({1362231405, 946121}, NULL) = 0
stat64("/proc/stat", {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
lstat64("/proc/stat", {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
open("/proc/stat", O_RDONLY|O_LARGEFILE) = 4
fstat64(4, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
time(NULL)                              = 1362231405
gettimeofday({1362231405, 946703}, NULL) = 0
gettimeofday({1362231405, 947180}, NULL) = 0
gettimeofday({1362231405, 947347}, NULL) = 0
gettimeofday({1362231405, 947577}, NULL) = 0
gettimeofday({1362231405, 947739}, NULL) = 0
gettimeofday({1362231405, 948003}, NULL) = 0
fstat64(4, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
gettimeofday({1362231405, 948364}, NULL) = 0
gettimeofday({1362231405, 948855}, NULL) = 0
read(4, "cpu  11250 88 9225 32838 60 0 31"..., 4096) = 1729
gettimeofday({1362231405, 954504}, NULL) = 0
gettimeofday({1362231405, 954819}, NULL) = 0
gettimeofday({1362231405, 955084}, NULL) = 0
gettimeofday({1362231405, 955308}, NULL) = 0
gettimeofday({1362231405, 955494}, NULL) = 0
gettimeofday({1362231405, 955813}, NULL) = 0
gettimeofday({1362231405, 956022}, NULL) = 0
gettimeofday({1362231405, 956228}, NULL) = 0
gettimeofday({1362231405, 956389}, NULL) = 0
gettimeofday({1362231405, 956757}, NULL) = 0
gettimeofday({1362231405, 956985}, NULL) = 0
gettimeofday({1362231405, 957218}, NULL) = 0
close(4)                                = 0
gettimeofday({1362231405, 957587}, NULL) = 0
gettimeofday({1362231405, 957748}, NULL) = 0
gettimeofday({1362231405, 957964}, NULL) = 0
gettimeofday({1362231405, 958174}, NULL) = 0
select(1, [0], NULL, NULL, {0, 0})      = 0 (Timeout)
write(1, "\33[6n", 4)                   = 4
select(1, [0], NULL, NULL, {1, 0})      = 1 (in [0], left {0, 990314})
ioctl(0, FIONREAD, [6])                 = 0
read(0, "\33[4;1R", 1024)               = 6
select(1, [0], NULL, NULL, {0, 150})    = 0 (Timeout)
read(0, "\n", 1024)                     = 1
write(1, "\n", 1)                       = 1
gettimeofday({1362231418, 517172}, NULL) = 0
gettimeofday({1362231418, 517684}, NULL) = 0
gettimeofday({1362231418, 517833}, NULL) = 0
gettimeofday({1362231418, 518094}, NULL) = 0
gettimeofday({1362231418, 518231}, NULL) = 0
gettimeofday({1362231418, 518500}, NULL) = 0
gettimeofday({1362231418, 518675}, NULL) = 0
gettimeofday({1362231418, 518999}, NULL) = 0
select(1, [0], NULL, NULL, {0, 150})    = 0 (Timeout)

我终于明白了。因为proc虚拟文件系统中类似于
/proc/stat
的文件不是真正的文件。长度为零是正常的


我所需要做的就是使用
StreamReader
来读取文件内容,可以是逐行(
ReadLine
)或整个(
ReadToEnd

试着在
strace
下运行你的程序,并告诉我们它发出了什么系统调用来读取文件。@John Zwinck,我已经包括了straceinfo@JohnZwinck,对不起,我想,实际上那些“特殊”文件没有长度,因为它们不是真实的文件。但是,我仍然可以通过StreamReader读取这些文件的内容。这是我的错。我使用了worng参数。你确实骗了我——你在问题中说StreamReader给了你一个空字符串。我想情况不是这样的?我很抱歉,毫无疑问我犯了一个错误。我没有输出StreamReader结果,因为FileInfo.Length=0让我头脑混乱。