ps aux를 사용하는 프로세스 ID


9

저는 쉘 프로그래밍에 초보자입니다. 입력하면 터미널에서 프로그램 (예 : NetBeans)을 시작했다고 가정합니다.

ps aux|grep netbeans

나는 출력을 얻는다

pre      18775  1.2  0.0  12524  1972 pts/3    S    20:17   0:00 

여기서 18775는 프로세스의 PID 등을 지정합니다.

그런 다음 사용하여 죽입니다.

kill 18775.

NetBeans UI가 사라집니다. 첫 번째 명령을 사용하여 pid를 얻으려고해도 여전히 얻을 수 있습니다.

pre      19137  0.0  0.0   9136  1068 pts/3    S+   20:19   0:00 grep --color=auto netbeans

프로세스가 종료 된 경우 왜 여전히 위의 출력이 표시됩니까?


1
그것은 당신에게 netbeans 프로세스를 보여주지 않습니다-그것은 ps aux가 파이프되는 grep 프로세스를 보여줍니다! 그 과정이기 때문에 grep netbeans, 그건 당신이 행의 끝에서 볼 수있는 프로그램입니다 ( grep --color=auto netbeans)
데이비드 Puglielli

답변:


16

grep 자체가 grepping하고 있습니다. 다음과 같은 것을 시도하십시오 :

ps aux |grep [n]etbeans

이것은 grep을 출력에 표시하지 못하게합니다.


2
이것은 작동하지만 그리 좋지는 않습니다. 당신은 또한 할 수 있습니다 ps aux | grep netbeans | grep -v grep. 그러나 대신 pgrep을 사용하십시오.
Martin Ueding

1
@queueoverflow pgrep는 좋지만 프로세스 이름과 만 일치합니다. 첫 번째 패턴은의 모든 열과 일치 할 수 있습니다 ps. (예를 들어, 파이썬이나 자바에서 실행되는 무언가, pgrep는 올바른 것을 pkill
움켜 쥐지

5

ps와 함께 사용 하지 마십시오grep .

오히려, 사용 killall netbeans, pkill netbeans그것을 죽일. 프로세스 ID의 경우 pgrep netbeans.

ps 및 grep 에 대한 추가 정보 .


5
그것은 내가 들어 본 것 중 가장 쓸모없는 조언입니다. 사람들이 grep 프로세스가 ps의 출력 ( "grep"으로 시작)에서 어떻게 보일지 알면이 둘을 함께 사용할 때 아무런 위험이 없습니다. 스크립트에서 킬을 사용하지 않는 것에 대한 조언을 이해하지만 요점은 아닙니다.
ovangle

3
그리고 나는 pgrep이 '(kill $ (pgrep vi *)'또는 놀랍도록 안전하지 않은 무언가를 요구하기 때문에 더 나쁘다고 생각합니다.
ovangle

1
이것은,이 페이지에서 가장 쓸모없는 대답으로 pgrep, pkill등 만 일치하는 프로세스 이름에 - 아무것도 해석되고 (자바, 파이썬, 배쉬 등)만을 사용하여 동일한 프로세스 이름으로 다른 사람과 구별 할 수있다 ps.
이즈 카타

3
@Izkata-pgrep 및 pkill에 -f를 사용하면 전체 명령 줄과 일치합니다. 당신이 언급 한대로 통역사에서 실행되는 물건을 일치 시키려고 할 때 때로는 유용합니다. 커맨드 라인의 어느 곳에서나 패턴을 참조하는 모든 것을 행복하게 죽일 수 있기 때문에 발로 자신을 쏠 수있는 좋은 방법이기도합니다 :)
roadmr

4

그것은 grep 프로세스의 PID이기 때문에 이후에 실행되도록 대기합니다 ps aux.


@ ovangle- 깜박임 나는 그것을 생각하지 못했습니다! : D 감사합니다!
P Ramesh

1
사실, grep되어 이미 실행중인 경우 ps aux실행됩니다. 마찬가지로 ps aux실행의 출력은 실행에 보내는 grep입력으로 인스턴스. 쉘이 grep아직 실행 되지 않았다면의 출력에 나타나지 않을 것입니다 ps.
Eliah Kagan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.