셸 스 크 립 트 가 지정 한 프로그램 이름 을 닫 는 프로 세 스 를 실현 합 니 다.
3479 단어 Shell
1、 기초 편
리 눅 스 시스템 에서 프로그램 디 버 깅 을 하거나 프로그램 업 그 레이 드 를 할 때 목표 프로그램 을 먼저 kill 로 닫 아야 합 니 다.이 때 가장 기본 적 인 방법 은 대상 프로 세 스 의 PID 를 찾 은 다음 kill 명령 을 실행 하여 대상 프로 세 스 를 닫 는 것 입 니 다.
예 를 들 어 svn 과 관련 된 프로 세 스 를 닫 으 려 면 먼저 ps - aux | grep svn 을 실행 하여 현재 시스템 에 svnserve 가 있 는 프로 세 스 를 찾 습 니 다. PID 는 15889 입 니 다.
이어서 kill - 9 15889 를 직접 실행 하면 이 svn 의 프로 세 스 를 닫 을 수 있 습 니 다.
2、 실천 편
위 에서 보 듯 이 프로 세 스 이름 에 따라 프로 세 스 를 닫 으 려 면 위 에서 찾 은 것 과 kill 의 두 단 계 를 합 쳐 실현 하면 됩 니 다.
1) 명령 실행
ps -ef | grep procedure_name | grep -v grep | awk '{print $2}' | xargs kill -9
위의 명령 중의 procedurename 모든 닫 힌 프로 세 스 이름
2) 셸 스 크 립 트 실행
다음은 일반적인 셸 스 크 립 트 방식 으로 이 기능 을 실현 하고 다음 스 크 립 트 를 실행 합 니 다.
./close_p.sh rocedure_name
메모: 스 크 립 트 가 실 행 될 때 스 크 립 트 자체 의 프로 세 스 이름 에 닫 혀 있 는 프로 세 스 이름 이 있 습 니 다. 스 크 립 트 를 작성 할 때 해당 하 는 처 리 를 해 야 합 니 다.
close_p. sh 스 크 립 트 의 실현 은 비교적 간단 합 니 다. 내용 은 다음 과 같 습 니 다.
#!/bin/bash
echo "***************************"
echo "Close the progress by name!"
echo "eg: ./close_p.sh progressName"
echo "***************************"
echo
#echo "PID of this script: $$"
#echo "PPID of this script: $PPID"
function MsgShow()
{
if [ $# -lt 1 ] ; then
echo "Parm err ! Exit the shell !";
exit 1;
else
case ${1} in
PARMMISS)
echo "Missing process name to close!"
;;
NOPROSS)
echo "No such process[$2]!"
;;
MULTIPROSS)
echo "There are too many process contains name[$2]"
;;
*)
echo "Default case!"
;;
esac
exit 1;
fi
}
function PidFind()
{
PIDCOUNT=`ps -ef | grep $1 | grep -v "grep" | grep -v $0 | awk '{print $2}' | wc -l`;
if [ ${PIDCOUNT} -gt 1 ] ; then
MsgShow MULTIPROSS $1;
elif [ ${PIDCOUNT} -le 0 ] ; then
MsgShow NOPROSS $1;
else
PID=`ps -ef | grep $1 | grep -v "grep" | grep -v ".sh" | awk '{print $2}'` ;
echo "Find the PID of this progress!--- process:$1 PID=[${PID}] ";
fi
read -p "Are you sure you want to close this progress[y/n]: "
if [ $REPLY = "y" ] || [ $REPLY = "yes" ] ; then
echo "Kill the process $1 ...";
kill -9 ${PID};
echo "kill -9 ${PID} done!";
else
echo "Confirmation of canceling,exit!";
exit 1
fi
#if we use return ,the return val must between 0 and 255
}
if [ $# -lt 1 ] ; then
MsgShow PARMMISS;
else
PidFind $1;
fi
3、 참고 편
셸 스 크 립 트 지식 은 다음 을 참고 할 수 있 습 니 다.
awk 지식 참고: sed 와 awk
주: 상기. sh 파일 을 Liux 로 복사 한 후 인 코딩 형식 에 주의 하 셔 야 합 니 다.
스 크 립 트 는 windows 에서 편집 을 만 들 고 Liux 시스템 에 올 렸 기 때문에 dos 형식 이 고 Liux 는 유 닉 스 형식 으로 만 실행 할 수 있 는 스 크 립 트 입 니 다.
linux 에서 vim close 사용p. sh, set ff 를 실행 하여 현재 파일 의 형식 을 봅 니 다. doc 형식 이면 실행 에 유사 한 오류 가 발생 합 니 다.
[root@localhost work]# ./close_p.sh -bash: ./close_p.sh:/bin/bash^M: bad interpreter: No such file or directory
이 때 우 리 는 set ff = 유 닉 스 를 실행 한 다음 에 다시 set ff 에서 파일 형식 이 유 닉 스 형식 으로 바 뀌 었 는 지 확인 하고 파일 을 저장 한 후에 정상적으로 실행 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell alias 명령에 별칭을 설정하는 방법명령에 별명을 설정하면 명령의'작은 이름'으로 삼을 수 있지만, 이렇게 하는 것이 무슨 의미가 있습니까? 이때 별명이 작용할 수 있다.vim 명령의 별명을vi라고 정의하면 이후에 실행된vi 명령은 실제로vim 명령을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.