Liux 셸 프로 그래 밍 12 특수 기호 "&"및 그 와 의 원한
기호 설명:
& &: 논리 적 관계 와
&: 배경 에서 프로 세 스 실행
$! :
Process PID
$$: ID
왜 여기 서 이런 기 호 를 말 해 야 합 니까?
다음은 이 몇 개의 부 호 를 살 펴 보 자.
이전 글 에서 pid 를 얻 는 방법 은 다음 과 같은 두 가지 입 니 다.
1. ps 명령 으로 pid 를 보 려 면 ps - ef | grep -v 'grep' | grep 'java' | awk '{print $2}'
이 명령 은 자바 라 는 프로그램의 pid 를 가 져 오 는 것 입 니 다. ps 명령 을 사용 한 첫 번 째 열 은 user 이기 때 문 입 니 다. 두 번 째 열 은 pid 입 니 다. 그래서 이 프로그램의 pid 를 가 져 올 수 있 습 니 다.
2. 포트 번호 로 pid 를 보 는 경우: netstat - anp | grep 8080 | awk '{print $7}' | awk '{split($0,b,"/");print b[1]}'
이 명령 은 넷 stat 를 사용 하기 때문에 8080 포트 번 호 를 가 져 오 는 프로그램의 pid 입 니 다. 출력 된 열의 일곱 번 째 열 은 프로그램 이름과 pid 가 있 고 그들 사 이 는 "/"로 구분 되 어 있 기 때문에 awk 프로 그래 밍 명령 의 split 를 사용 하여 배열 이 배열 에서 의 값 을 가 져 옵 니 다. 그러면 pid 를 얻 을 수 있 습 니 다.
3. 그러나 이런 방식 이 불편 하고 코드 가 죽 어 있 는 것 같 습 니 다. 건장 하지 않 습 니 다. 수출 열 에 변화 가 있 으 면 얻 을 수 없습니다.그래서 우 리 는 이런 방식 으로 시험 해 볼 수 있다. 그것 이 바로 $이다!그리고 &, 위의 소 개 를 통 해 우리 도 알 고 있 습 니 다. $!마지막 으로 실행 되 는 프로 세 스 의 pid 입 니 다. & 배경 에서 프로 세 스 를 실행 하 는 것 을 표시 합 니 다. 그러면 우 리 는 명령 을 사용 하여 프로그램의 pid 를 가 져 올 수 있 습 니 다.
4. 간단 한 인 스 턴 스, pid 가 져 오기#!/bin/bash
java hello & echo $! >/usr/src/run.pid
이 스 크 립 트 는 매우 간단 합 니 다. 바로 hello 라 는 자바 프로그램 을 실행 한 후에 알 수 있 을 것 입 니 다. 바로 이 자바 를 실행 하 는 프로 세 스 pid 를 가 져 와 서 run. pid 라 는 디 렉 터 리 로 다시 설정 하 는 것 입 니 다.
이 파일 에서 pid 가 져 오기 : $(cat /usr/src/run.pid) 또는 반 따옴표 'cat/usr/src/run. pid' 를 사용 합 니 다.
이렇게 하면 우 리 는 이 파일 에서 이전에 저 장 된 pid 를 읽 을 수 있 습 니 다. 가 져 온 후에 우 리 는 ps - p $pid | grep 'name' 을 사용 하여 이 프로그램의 실행 여 부 를 가 져 올 수 있 습 니 다.
5. 정식 스 크 립 트 첨부#!/bin/bash
basepath=/www/homepage
PATH=$PATH:$HOME/bin:/usr/local/mysql/lib/mysql/
JAVA_HOME=/usr/java/jdk
ANT_HOME=/usr/java/ant
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/usr/local/resin/lib/jsdk23.jar
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
export JAVA_HOME CLASSPATH ANT_HOME PATH
LANG=zh_CN
export LANG
cd $basepath/WebRoot/WEB-INF/classes
PID=`cat /www/homepage/1minute.pid`
content=`ps -p $PID -f |grep DumpFileByMultThread`
if [ "$content" != "" ]; then
kill -9 $PID
echo "$PID is killed"
fi
java -classpath .:$basepath/WebRoot/WEB-INF/lib/commons-httpclient-3.0.jar:$basepath/WebRoot/WEB-INF/lib/log4j-1.2.11.jar:$basepath/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar:$basepath/WebRoot/WEB-INF/lib/commons-codec-1.3.jar:$basepath/WebRoot/WEB-INF/lib/commons-net-1.4.1.jar:$basepath/WebRoot/WEB-INF/lib/jakarta-oro.jar com.soufun.fetch.DumpFileByMultThread $basepath/src/com/soufun/fetch/1minute.txt & echo $! > /www/homepage/1minute.pid
~
주: 여기 질문 이 있 습 니 다 & $! >filenae 이것 은 자바 시작 스 크 립 트 에 쓰 는 것 은 문제 가 없 지만 tomcat 를 시작 하 는 스 크 립 트 에 쓰 는 것 은 틀 리 지 않 지만 가 져 온 pid 는 대응 하 는 프로 세 스 를 찾 을 수 없습니다.
위의 스 크 립 트 의 주요 부분 은 다음 과 같다.
(1) 、 반 따옴표 ` 또는 $() 를 사용 하여 명령 cat 를 실행 합 니 다. /이 파일 에서 pid 가 져 오기
(2) 사용 ps -p $pid -f | grem "name" 지정 한 pid 에서 지정 한 프로 세 스 이름 의 프로 세 스 정 보 를 가 져 옵 니 다.여기 서 - f 를 추가 하지 않 으 면 프로 세 스 이름 을 가 져 올 수 없습니다. - f 는 전체 이름 입 니 다.
(3) 프로 세 스 가 존재 하면 관련 정 보 를 얻 을 수 있 고 존재 하지 않 으 면 정 보 를 얻 지 못 하면 정보 가 비어 있 습 니 다.
(4) 정보 가 비어 있 지 않 으 면 프로 세 스 가 실행 되 고 있 음 을 설명 하고 kill 을 사용 합 니 다. -9 $pid 강제 처치 프로 세 스 및 하위 프로 세 스
6. 네 개의 부 호 를 첨부 한다.
>、>!、>> 、 < 、이 네 개의 부호
> 출력 을 파일 이나 장치 로 바 꾸 어 원래 파일 을 덮어 씁 니 다 >! 출력 을 파일 이나 장치 로 변경 하여 원래 파일 을 강제로 덮어 씁 니 다 >> 출력 을 파일 이나 장치 로 바 꾸 어 원래 파일 을 추가 합 니 다 < 입력
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.