绕过截断的"ps"

noi*_*olo 10 solaris

我正在尝试编写一个脚本,它将根据关键字找到一个特定的进程,提取PID,然后使用找到的PID将其终止.

我在Solaris中遇到的问题是,因为"ps"结果被截断,基于关键字的搜索将无法工作,因为关键字是截断的部分(过去80个字符)的一部分.

我读到你可以使用"/ usr/ucb/ps awwx"来获得超过80个字符的内容,但是从Solaris 10开始,这需要从root运行,我无法在脚本中避免这种限制.

有没有人有任何关于获得PID的建议?前80个字符太通用了,无法搜索(java命令的一部分).

谢谢.

Aar*_*ron 14

这对我有用,至少在Joyent SmartMachine上是这样的:

/usr/ucb/ps auxwwww
Run Code Online (Sandbox Code Playgroud)


jll*_*gre 9

你对ps行为的假设是不正确的.即使您没有以root身份登录,"/ usr/ucb/ps -ww"也不会截断您拥有的进程的参数,即对于您可以杀死的进程,这是您唯一感兴趣的进程.

$ cat /etc/release
                    Oracle Solaris 10 9/10 s10x_u9wos_14a X86
     Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
                            Assembled 11 August 2010
$ id
uid=1000(jlliagre) gid=1000(jlliagre)
$ /usr/ucb/ps | grep abc
  2035 pts/3    S  0:00 /bin/ksh ./abc aaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbb
$ /usr/ucb/ps -ww | grep abc
  2035 pts/3    S  0:00 /bin/ksh ./abc aaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb ccccccccccccccccccccccccccccccccccccccccccccccccccccccc ddddddddddddddddddddddddddddddddddddddddddd
Run Code Online (Sandbox Code Playgroud)