내 대답은 '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
}
ps aux |grep
과pgrep
(또는pgrep -f
).