내 답변은 ps
목록 에서 "foobar"를 검색하는 일반적인 답변의 변형입니다 . 의 주장 "-A" "ps"
은보다 이식성이 "aux"
뛰어나지 만이 변화는 답과 관련이 없다고 생각합니다. 일반적인 대답은 다음과 같습니다.
$ ps -A -ww | grep [f]oobar
대신이 패턴을 사용합니다.
$ ps -A -ww | grep [^]]foobar
주요 장점은 [^]]
원하는 패턴 으로 정적 문자열 을 연결하기 때문에이 패턴을 기반으로 스크립트를 작성하는 것이 더 쉽다 는 것입니다. 문자열의 첫 글자를 뺄 필요가 없으며 대괄호 사이에 삽입 한 다음 다시 연결하십시오. 쉘에서 스크립팅 할 때 [^]]
찾고자하는 패턴 앞에 단순히 붙이는 것이 더 쉽습니다 . Bash에서 문자열 슬라이싱은 추한 일이므로 변형으로 피할 수 있습니다. 이 변형은 패턴이 앞 오른쪽 대괄호없이 일치하는 선을 보여줍니다]. 대괄호를 제외하는 검색 패턴은 실제로 대괄호를 패턴에 추가하므로 절대 일치하지 않습니다.
따라서 psgrep
다음과 같이 이식 가능한 명령을 작성할 수 있습니다. 여기서는 Linux, OS X BSD 등의 차이점에 대해 약간의 여유를 두었습니다. 이것은에서 열 헤더를 추가하고 ps
더 많은 사용자 정의를 제공합니다.ps
내 요구에 더 적합한 형식으로, 명령 줄 인수가 누락되지 않도록 여분의 너비를 추가로 표시하는 프로세스를 표시합니다. 글쎄, 대부분은 그리워하지 않습니다. Java는 Java이기 때문에 가능한 한 최악의 방법으로 작업을 수행하므로 일부 Java 서비스는 프로세스 테이블에서 추적 할 수있는 최대 허용 길이의 인수를 초과하여 실행됩니다. 나는 이것이 1024 자라고 생각합니다. 프로세스를 시작하는 데 허용되는 명령 단독 길이는 훨씬 길지만 커널 프로세스 테이블은 1K 이상의 길이를 추적하지 않습니다. 명령이 시작되면 command-name 및 argument list가 필요하지 않으므로 프로세스 테이블에 저장되는 것은 정보 용입니다.
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour
있습니다.