C包装器删除命令“上的用户”;ps";
我有一个问题也许这里有人能帮我。如果我在linux控制台上执行“ps aux--sort user”,那么我就有一个用户列表及其在机器上运行的进程。我的问题是如何在C程序中删除用户名并像这样打印列表: 例如:C包装器删除命令“上的用户”;ps";,c,linux,apache,console,C,Linux,Apache,Console,我有一个问题也许这里有人能帮我。如果我在linux控制台上执行“ps aux--sort user”,那么我就有一个用户列表及其在机器上运行的进程。我的问题是如何在C程序中删除用户名并像这样打印列表: 例如: (…) -------------------------------------------------------------------------- user: APACHE -----------------------------------------------------
(…)
--------------------------------------------------------------------------
user: APACHE
--------------------------------------------------------------------------
3169 0.0 1.2 39752 12352 ? S 04:10 0:00 /usr/sbin/httpd
--------------------------------------------------------------------------
user: VASCO
--------------------------------------------------------------------------
23030 0.0 0.1 4648 1536 pts/1 Ss 20:02 0:00 –bash
(…)
我打印用户名,然后打印他的流程。。。有什么想法吗
thx并不是您问题的答案,但在unix中用户名是区分大小写的,所以将它们全部大写可能不是一个好主意。如果您想让它们在视觉上脱颖而出,那么“USER:apache”会更好
除此之外,bmdhacks的答案是好的(但不完全正确)。您可以在awk中执行类似的操作,但它会更加复杂。这并不是您问题的答案,但在unix中用户名区分大小写,所以将它们全部大写可能不是一个好主意。如果您想让它们在视觉上脱颖而出,那么“USER:apache”会更好 除此之外,bmdhacks的答案是好的(但不完全正确)。您可以在awk中执行类似的操作,但它会更加复杂。这应该可以:
ps haux --sort user | perl -npe 's/^(\S+)\s+//; if ($user ne $1) {$user=$1; print "user: " . uc($user) . "\n";}'
基于bmdhacks的回答,但有以下修复:
a) 它将任何非空白作为用户名的一部分计算,
b) 它会删除用户名后的任何空格,就像您的示例输出一样,否则事情就不会发生了
c) 我必须移除g才能让它工作。我认为,因为有了g,它可能会匹配很多次,所以perl不会设置$1,因为它可能是不明确的。
d) 将h添加到ps命令中,使其不输出标题。这应该可以:
ps haux --sort user | perl -npe 's/^(\S+)\s+//; if ($user ne $1) {$user=$1; print "user: " . uc($user) . "\n";}'
基于bmdhacks的回答,但有以下修复:
a) 它将任何非空白作为用户名的一部分计算,
b) 它会删除用户名后的任何空格,就像您的示例输出一样,否则事情就不会发生了
c) 我必须移除g才能让它工作。我认为,因为有了g,它可能会匹配很多次,所以perl不会设置$1,因为它可能是不明确的。
d) 在ps命令中添加了h,这样它就不会输出头了。这是linux的命令行,可以实现我所说的。。。但那不是我想要的。。。我想在一些C程序中实现这一点。。。我必须写一个C程序,使。。。所以我使用fork()创建一个进程,执行ps aux--sort user。。。然后我想用另一个进程来控制进程和用户的打印。。。sry,如果我解释我的问题
我要运行的命令如下:ps aux--sort user | sort_by_user。。。此选项“按用户排序”不存在。。在C中创建一些进程来运行该命令,使用fork()和execlp()命令很简单,但在C中创建该命令的一些选项我并没有任何想法 这是linux的命令行,可以实现我所说的。。。但那不是我想要的。。。我想在一些C程序中实现这一点。。。我必须写一个C程序,使。。。所以我使用fork()创建一个进程,执行ps aux--sort user。。。然后我想用另一个进程来控制进程和用户的打印。。。sry,如果我解释我的问题
我要运行的命令如下:ps aux--sort user | sort_by_user。。。此选项“按用户排序”不存在。。在C中创建一些进程来运行该命令,使用fork()和execlp()命令很简单,但在C中创建该命令的一些选项我并没有任何想法 你有很多选择,这取决于你想在C语言中完成多少 最简单的方法是使用system()运行shell命令(如我之前发布的命令)来完成全部工作。system()实际上会生成一个shell,因此重定向之类的操作将与从命令行执行的操作一样有效 如果您想避免使用system(),您可以自己做,生成两个进程并将它们链接在一起。查找管道()和dup2()。可能是浪费时间 您可以运行ps程序并用C解析其输出。同样,pipe()和dup2()是相关的。对于实际的解析,我只需要使用普通的C字符串处理例程,因为它非常简单。显然,您可以使用正则表达式库,但我认为在这种情况下,它将导致比没有它更复杂的代码
当然,您可以通过查看/proc中的文件在C中完成全部工作。您有许多选项,这取决于您想在C中完成多少工作 最简单的方法是使用system()运行shell命令(如我之前发布的命令)来完成全部工作。system()实际上会生成一个shell,因此重定向之类的操作将与从命令行执行的操作一样有效 如果您想避免使用system(),您可以自己做,生成两个进程并将它们链接在一起。查找管道()和dup2()。可能是浪费时间 您可以运行ps程序并用C解析其输出。同样,pipe()和dup2()是相关的。对于实际的解析,我只需要使用普通的C字符串处理例程,因为它非常简单。显然,您可以使用正则表达式库,但我认为在这种情况下,它将导致比没有它更复杂的代码
当然,,通过查看/proc中的文件,您可以在C中完成全部工作。使用popen并在C程序中操作重定向的标准输出字符串使用popen并在C程序中操作重定向的标准输出字符串我通过重定向标准输出并编辑它解决了我的问题。我通过重定向标准输出解决了我的问题和编辑它。我理解你对吗:你想要按用户分组的进程列表?我理解你对吗:你想要按用户分组的进程列表?这不太正确,因为\w匹配字母数字和下划线,但其他字符在用户名中有效。特别是连字符非常常见(例如www数据),这不太正确,因为