특정 프로세스에 대해 사용자, pid 및 명령 만 실행하는 방법은 무엇입니까? (우분투 11.10)


19

내가 할 때 ps -ef|grep python다음을 얻습니다.

myusername  4492  2994  0 10:32 pts/0    00:00:01 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665     1  0 10:42 ?        00:00:00 /usr/bin/python /usr/lib/system-service/system-service-d
myusername 14051 13497  0 11:28 pts/7    00:00:00 grep --color=auto python

프로세스를 실행 하는 사용자 , pid명령 이 다음 출력과 같이 프로세스에 대해 실행되도록하려면 어떻게해야합니까?

myusername  4492 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665 /usr/bin/python /usr/lib/system-service/system-service-d

이 작동합니까? ps --fields="user pid command"
pratnala

시도하지 않았습니다. 인터넷에서 찾았습니다. 우분투 머신 근처가 아닙니다. 죄송합니다. 나중에
보시고

아니요, 오류 : 알 수없는 gnu long 옵션이 표시됩니다. 그것은 당신을 위해 작동합니까?
Bentley4

답변:


13

-o 인수를 찾고 있다고 생각합니다.

-o 형식 :

사용자 정의 형식. 형식은 공백으로 구분되거나 쉼표로 구분 된 목록 형식의 단일 인수이며 개별 출력 열을 지정하는 방법을 제공합니다. 인식되는 키워드는 아래의 표준 형식 지정자 섹션에 설명되어 있습니다. 원하는대로 헤더 이름을 바꿀 수 있습니다 (ps -o pid, ruser = RealUser -o comm = Command). 모든 열 헤더가 비어 있으면 (ps -o pid = -o comm =) 헤더 행이 출력되지 않습니다. 넓은 머리글에 필요한 경우 열 너비가 증가합니다. 이것은 WCHAN (ps -o pid, wchan = WIDE-WCHAN-COLUMN -o comm)과 같은 열을 넓히는 데 사용될 수 있습니다. 명시 적 너비 제어 (ps opid, wchan : 42, cmd)도 제공됩니다. ps -o pid = X, comm = Y의 동작은 성격에 따라 다릅니다. 출력은 "X, comm = Y"라는 열 하나 또는 "X"와 "Y"라는 열 두 개일 수 있습니다. 확실하지 않은 경우 여러 -o 옵션을 사용하십시오. PS_FORMAT 환경 변수를 사용하여 원하는대로 기본값을 지정하십시오. DefSysV 및 DefBSD는 기본 UNIX 또는 BSD 열을 선택하는 데 사용할 수있는 매크로입니다.

따라서 원하는 명령은 (우분투)입니다.

ps -o uid,pid,cmd -ef|grep python

OpenSolaris에서 명령은 다음과 같습니다.

ps -o ruser,pid,comm -ef|grep python

3
실제로 효과가 있습니까? 내가 그 명령을 실행하면 내가 얻을Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
Bentley4

예, OpenSolaris의 ksh에서 작동합니다. 결과물은 원하는대로입니다 man ps. 시스템의 ps 매뉴얼 페이지를 확인하십시오 . 시스템에서 구문이 약간 다를 수 있습니다.
Simon

1
그러나 영업 이익은 떠들썩한 파티에하지 KSH에
pratnala

1
@ Bentley4 명령을 원하고 추가 정보가 필요하지 않으면 -f 인수를 삭제하고 다음 명령을 사용할 수 있습니다.ps -o uid,pid,cmd -e|grep python
Simon

1
@ Bentley4 :ps -o user,pid,cmd -e|grep '[p]ython'
Simon

3

가장 간단한 방법은 다음과 같습니다.

$ ps o uid=,pid=,cmd= -C python
1000 26126 python

그렇게하면 모든 것을 직접 가져 와서 ps구문 분석 할 필요가 없습니다.

로부터 ps매뉴얼 페이지

-o format

사용자 정의 형식. 형식은 공백으로 구분되거나 쉼표로 구분 된 목록 형식의 단일 인수이며 개별 출력 열을 지정하는 방법을 제공합니다. [...] 원하는대로 헤더 이름을 바꿀 수 있습니다 (ps -o pid, ruser = RealUser -o comm = Command). 모든 열 헤더가 비어 있으면 (ps -o pid = -o comm =) 헤더 행이 출력되지 않습니다.

-C cmdlist
     Select by command name.  This selects the processes whose executable 
     name is given in cmdlist.

-C실행중인 경우 옵션이 작동합니다 python파이썬 스크립트를 실행하지 않을 경우, 대화 형. 이 경우 -C scriptname.py대신 사용해야 합니다.


1

내 PS 버전이 다르므로 약간의 조정이 필요할 수 있지만 cut (및 달성하려는 대상에 따라 tr 가능)을 사용할 수 있습니다.

PS ef | 컷 -c1-16,50-   

ps 문의 각 줄에서 1-16 및 50 문자를 제공합니다. (실제 수치는 약간의 마사지가 필요할 것입니다).

다른 방법은 (하지만 형식이 느슨 할 수 있음)

PS ef | tr -s ""| 컷 -f1,2,8- -d ""

ps 명령에서 공백을 압축 한 다음 필드 1, 2 및 8을 가져 와서 표시합니다.


하나의 프로세스에 대해서만 해당 명령을 사용하여 전체 화면에 절반 페이지의 정보를 얻습니다. 읽을 수 없으며 매개 변수를 '메시징'하고 있지만 지금까지 원하는 것을 원격으로 얻을 수 없었습니다.
Bentley4

1
ps -eo user,pid,cmd | grep [p]ython

예:

$ ps -eo user,pid,cmd | grep [p]ython
root      1056 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1735 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
bmaupin  16613 /usr/bin/python3 /usr/share/system-config-printer/applet.py

설명:

  • -e 모든 프로세스
  • -o 사용자 정의 형식
  • user,pid,cmd 사용자, 프로세스 ID, 명령 열 표시

참고 : 당신이 사용하는 경우 -f-e다른 제안으로, 당신이 오류가 발생할 수 있습니다. 이러한 매개 변수는 모두 출력 형식을 제어하기 때문에 그 중 하나만 사용해야합니다.

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.