CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·주식한당 ·아이포니앙 ·MaClien ·일본산당 ·방탄소년당 ·자전거당 ·개발한당 ·이륜차당 ·안드로메당 ·소시당 ·나스당 ·골프당 ·디아블로당 ·육아당 ·AI당 ·가상화폐당 ·영화본당 ·클다방 ·리눅서당 ·소셜게임한당 ·걸그룹당 ·젬워한당 ·노젓는당 ·사과시계당 ·야구당 ·패스오브엑자일당 ·IoT당 ·창업한당 ·캠핑간당 ·패셔니앙 ·라즈베리파이당 ·맛있겠당 ·물고기당 ·노키앙 ·바다건너당 ·여행을떠난당 ·3D메이킹 ·X세대당 ·ADHD당 ·AI그림당 ·날아간당 ·배드민턴당 ·농구당 ·블랙베리당 ·곰돌이당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·콘솔한당 ·요리한당 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·개판이당 ·동숲한당 ·날아올랑 ·전기자전거당 ·e북본당 ·갖고다닌당 ·이브한당 ·도시어부당 ·FM한당 ·포뮬러당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·KARA당 ·키보드당 ·꼬들한당 ·덕질한당 ·어학당 ·가죽당 ·레고당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·MTG한당 ·소리당 ·적는당 ·방송한당 ·PC튜닝한당 ·찰칵찍당 ·그림그린당 ·소풍간당 ·심는당 ·품앱이당 ·리듬탄당 ·달린당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·축구당 ·나혼자산당 ·스타한당 ·스팀한당 ·파도탄당 ·퐁당퐁당 ·테니스친당 ·테스트당 ·빨콩이당 ·공대시계당 ·터치패드당 ·트윗당 ·VR당 ·시계찬당 ·WebOs당 ·위스키당 ·와인마신당 ·WOW당 ·윈폰이당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

리눅서당

서버/넷트웍 bash script 처리가 가능한지 질문 드립니다. 22

2022-12-06 17:48:07 수정일 : 2022-12-06 17:48:22 211.♡.19.242
테츠

ps -ef 결과값에서 특정 프로세스 PID만 골라서 kill 해주고 싶습니다.


예를들면 ps -ef 치면 아래와 같이 결과가 나오는데

$ ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD

root         1     0  0 Dec02 ?        00:00:00 /init

root        13     1  0 Dec02 ?        00:00:00 /init

root        33    13  0 Dec02 ?        00:00:00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups

root        37     1  0 Dec02 ?        00:00:00 /init

root        57    37  0 Dec02 ?        00:00:00 /usr/sbin/smbd -D

root        61    57  0 Dec02 ?        00:00:00 /usr/sbin/smbd -D

root        62    57  0 Dec02 ?        00:00:00 /usr/sbin/smbd -D

root        63    57  0 Dec02 ?        00:00:00 /usr/sbin/smbd -D

root       192     1  0 Dec02 ?        00:00:00 /init

root       193   192  0 Dec02 ?        00:00:00 /init

root       194   193  0 Dec02 pts/0    00:00:06 /mnt/wsl/docker-desktop/docker-desktop-user-distro proxy --distro-name Ubuntu --doc

root       210   192  0 Dec02 ?        00:00:00 /init

test       211   210  0 Dec02 pts/1    00:00:29 docker serve --address unix:///home/wiz/.docker/run/docker-cli-api.sock

root       229    57  0 Dec02 ?        00:31:43 /usr/sbin/smbd -D

root      6998     1  0 11:17 ?        00:00:00 /init

root      6999  6998  0 11:17 ?        00:00:00 /init

test      7000  6999  0 11:17 pts/2    00:00:00 -bash

root      7404     1  0 13:38 ?        00:00:01 /init

test      7405  7404  0 13:38 ?        00:00:00 [bash] <defunct>

test      7482  7404  0 13:39 ?        00:00:00 ./test_server

test      7887  7404  0 14:22 ?        00:00:00 ./test_server 11111

test      7946  7404  0 14:29 ?        00:00:00 ./test_server 11112

test      8041  7404 99 14:46 ?        02:49:38 ./test_server 11112

root      8044     1  0 14:47 ?        00:00:00 /init

test      8045  8044  0 14:47 ?        00:00:00 [bash] <defunct>

test      8511  8044 97 16:13 ?        01:20:58 ./test_server

root      8529     1  0 16:17 ?        00:00:00 /init

root      8530  8529  0 16:17 ?        00:00:00 /init

test      8531  8530  0 16:17 pts/6    00:00:00 -bash

test      9119  8530  0 17:23 pts/6    00:00:00 ./test_server 40004

test      9135  8530  0 17:24 pts/6    00:00:00 ./test_server 40005

test      9161  8530  0 17:26 pts/6    00:00:00 ./test_server 40007

test      9186  8530  0 17:28 pts/6    00:00:00 ./test_server 40008

test      9210  8530  0 17:33 pts/6    00:00:00 ./test_server 40009

test      9220  8531  0 17:36 pts/6    00:00:00 ps -ef


위 결과에서 ./test_server 에 해당하는 PID만 골라서 kill 해주고 싶습니다.

sudo kill 7482

sudo kill 7887

sudo kill 7946

sudo kill 8041

sudo kill 8511

sudo kill 9119

sudo kill 9135

sudo kill 9161

sudo kill 9186

sudo kill 9210



테스트용 서버 프로그램 코딩하고 있는데, 계속 bind error 가 발생해서 구글링해보니

fork로 생성한 process가 살아있어서 socket bind 한게 풀리지 않아서 

port를 계속 점유하고 있는 상황으로 보여집니다.


.sh 로 script 하나 만들어서 ps -ef 결과중에서 /test_server 에 해당하는 PID 값을 kill 해줄수 있는

스크립트 만들 수 있을지 조언 부탁 드립니다.

테츠 님의 게시글 댓글
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [22]
MYMIYU
IP 129.♡.171.74
12-06 2022-12-06 19:04:09
·
sudo kill `ps -ef | grep test_server | awk '{print $2}'`
테츠
IP 124.♡.43.204
12-06 2022-12-06 19:45:38
·
@MYMIYU님
감사합니다. 알려주신 팁 응용해서 사용해보겠습니다.
테츠
IP 124.♡.43.204
12-06 2022-12-06 21:10:38 / 수정일: 2022-12-06 21:13:26
·
@MYMIYU님
알려주신 커맨드 실행해 보니 "kill: (880813): 그런 프로세스가 없음" 이라고 로그 1줄만 찍히는데
kill은 다 수행되어 ps -ef 결과가 클린해진 걸 확인할 수 있었습니다.
테츠
IP 124.♡.43.204
12-06 2022-12-06 21:13:21
·
@MYMIYU님
한가지 궁금한게 있습니다.
알려주신 커맨드 실행하면 "kill: (880813): 그런 프로세스가 없음" 이라고 로그 1줄만 찍혀서 이해가 잘 안되는 부분이 있습니다.
저는 bash script 에서 for 문같은거 돌려서 반복문으로 처리해야 할거라고 생각했는데
sudo kill `ps -ef | grep test_server | awk '{print $2}'` 한줄로 여러 개의 kill 명령이 처리되는게 맞는지...
해당 부분을 이해하려면 awk 를 이해해야 하는건지 궁금하여 추가 질문 드립니다.
DearMai
IP 59.♡.129.190
12-06 2022-12-06 21:20:48 / 수정일: 2022-12-06 21:25:10
·
@테츠님
에러 로그 한줄은 "grep test_server" 이 프로세스도 ps -ef 때 잡혀서 그걸 kill 할려고 해서 그런거고 무시하거나 아래 링크 보고 처리 하시면 되구요
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hellowkorea&logNo=50096347788

두번째 질문은 답변적었다 저도 틀린거 같아 지웠는데..
이건 쉘에서 파이프라인을 통한 전달때 \n 처리에 따라서 그런게 아닐까 싶네요.. 일단 awk 공부와는 조금 별개 인건 맞습니다.
MYMIYU
IP 118.♡.98.179
12-06 2022-12-06 23:27:08
·
ps -ef | grep test_server
라고 하면 ps -ef 명령의 결과에서 test_server 라는 문구가 들어간 줄을 모두 골라내게 됩니다.

awk '{print $2}'
라고 하면 awk 에 입력된 결과에서 매 줄의 두번째 항목만 골라 출력하게 됩니다.
ps -ef 명령의 결과에서 PID에 해당하는 부분이 매번 두번째 항목이기 때문에 ps -ef 명령에서 test_server 라는 문구가 들어간 줄을 모두 골라내고, 각 줄의 두번째 항목인 PID 만을 출력하게 됩니다.

따라서,
ps -ef | grep test_server | awk '{print $2}'
를 실행한 결과는 ps -ef 명령의 결과에서 test_server 가 들어가는 줄의 PID 들만 나오는 것입니다.

sudo kill `ps -ef | grep test_server | awk '{print $2}'`
라고 하게 되면 ps -ef | grep test_server | awk '{print $2}' 명령을 수행한 결과를 sudo kill 의 파라미터로 넘깁니다.
kill 명령은 PID 여러개를 한꺼번에 받을 수 있기 때문에 for loop 같은거 필요 없이 그냥 한꺼번에 넘겨줘도 됩니다.

말씀하신 오류 (그런 프로세스가 없음) 는 ps -ef 명령어를 내릴 당시에는 grep test_server 라는 명령어도 돌아가고 있기 때문에 해당 프로세스의 PID도 포함되는데, sudo kill 명령이 실행되는 시점에서는 grep 명령어가 종료되어 해당 프로세스가 없기 때문에 나오는 것이니 무시하셔도 됩니다.

굳이 그런 오류도 보고 싶지 않으시다면,
sudo kill `ps -ef | grep test_server | grep -v grep | awk '{print $2}'`
처럼 해 주시면 grep 이 들어간 프로세스를 제외시켜줄 수 있습니다.
MYMIYU
IP 118.♡.98.179
12-06 2022-12-06 23:32:31
·
loop 를 원하시면,

while IFS= read -r pid; do
sudo kill $pid
done <<< $(ps -ef | grep test_server | grep -v grep | awk '{print $2}')

처럼 while 문을 쓰셔도 되고,

pids=($(ps -ef | grep test_server | grep -v grep | awk '{print $2}'))
for pid in $pids; do
sudo kill $pid
done

처럼 for 문을 쓰셔도 됩니다.
테츠
IP 223.♡.22.220
12-07 2022-12-07 09:00:36
·
@MYMIYU님
자세한 설명 너무 감사 드립니다.
가르쳐주신 팁으로 script 응용해 잘 써먹을 수 있을거 같습니다.
삭제 되었습니다.
테츠
IP 223.♡.22.220
12-07 2022-12-07 09:01:30
·
@분노의다운힐님
아... killall 커맨드가 있는지를 모르고 있었습니다. ;;;
리눅스 경력 짧은게 여기서 드러나네요.
조언 감사합니다.
ifmkl
IP 211.♡.244.129
12-07 2022-12-07 07:56:21
·
아니면 test_server 실행시킬때 pid 파일 남기시고 그 안에 process id 읽어서 죽이세요
테츠
IP 223.♡.22.220
12-07 2022-12-07 09:05:39
·
@꼬반님
조언 감사합니다.
인연에 없던 서버 프로그램을 어거지로 찌려다보니 학생때 배우던 fork 써보면서 child 살아있능데 parent가 죽어버려서 애먹고 있습니다.
프로그램 종료될때 fork 로 생성된 모든 자식들 다 종료시켜야 할듯한데
쉽게 쉽게 안되네요.
우주곰
IP 211.♡.82.27
12-07 2022-12-07 08:22:23 / 수정일: 2022-12-07 08:23:32
·
sudo ps -ef | grep [t]est_server | awk '{print $2}' | xargs --no-run-if-empty kill -9 로 하시면 오류가 안날꺼에요
테츠
IP 223.♡.22.220
12-07 2022-12-07 09:02:29
·
@우주곰님
에러 안나는 방법 알려주셔서 감사합니다.
우주곰
IP 211.♡.82.27
12-07 2022-12-07 09:43:19
·
포트 번호로 프로세스를 죽이실려면 아래와 같이 하시면 됩니다.
sudo lsof -t -i:포트번호 -sTCP:LISTEN | xargs --no-run-if-empty kill -9
테츠
IP 211.♡.19.242
12-08 2022-12-08 16:41:04
·
@우주곰님
포트번호 활용하는 조언 정말 감사합니다.
rwsrwxrwx
IP 14.♡.128.97
12-07 2022-12-07 19:47:57
·
pkill -f test_server
테츠
IP 211.♡.19.242
12-08 2022-12-08 16:39:38
·
@rwsrwxrwx님
pkill이 있는지도 모르고 있었습니다. 조언 감사 드립니다.
sephid86
IP 119.♡.245.211
12-07 2022-12-07 20:33:37 / 수정일: 2022-12-07 20:34:06
·
저는 이렇게 합니다.

-프로세스 이름으로 종료시키기-
kill -9 `ps -ef | grep 프로세스이름 | grep -v grep | awk '{print $2}'`

killall -9 프로세스이름

pkill -9 -ef 프로세스이름
테츠
IP 211.♡.19.242
12-08 2022-12-08 16:40:38
·
@sephid86님
조언 감사합니다. killall 이나 pkill 커맨드를 몰랐는데 이번에 제대로 배워 앞으로 안까먹을거 같습니다.
macprenew
IP 221.♡.172.154
12-16 2022-12-16 02:27:16 / 수정일: 2022-12-16 02:34:31
·
@sephid86님 `grep 프로세스이름 | grep -v grep` 이걸 `grep [프]로세스이름`으로 바꿀 수 있습니다. 본문의 코드를 바탕으로하면 `grep [t]est_server` 입니다.
macprenew
IP 221.♡.172.154
12-16 2022-12-16 02:25:09 / 수정일: 2022-12-16 02:32:42
·
PPID로 종료할 수 있겠지만, 아예 같은 process group id를 이용할 수도 있습니다. 이 경우에는 PPID가 이미 종료되었을때도 PPID에 의해 실행되었던 process들 전부를 죽일 수 있습니다. ps x -o "%p %r %a" | grep [t]est_server | awk '{print $2}' | xargs -I {} kill -TERM -- -{}

이걸 사용하기 전에
ps x -o "%p %r %a" | grep [t]est_server 를 사용하여 확인하세요.
테츠
IP 124.♡.43.204
12-16 2022-12-16 07:10:44
·
@macprenew님
설명 감사합니다. 알려주신 내용 응용해보겠습니다.
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.