링크 ux 셸 다 중 프로 세 스
1.1 command & 배경 실행
터미널 명령 줄 을 풀 고 command 명령 프로그램 을 배경 에 걸 어 계속 실행 합 니 다. 그러면 사용 자 는 프로그램 이 끝 난 후에 터미널 명령 줄 을 풀 필요 가 없습니다. command 배경 에서 실행 을 기다 리 면서 다른 일 을 할 수 있 습 니 다.단, 현재 터미널 을 닫 을 수 없습니다. 배경 에 걸 려 있 는 command 명령 은 현재 터미널 에 의존 합 니 다. 현재 터미널 을 닫 으 면 배경 에 있 는 coman 명령 도 실 행 됩 니 다.예 를 들 어 sort 명령 을 사용 하여 큰 파일 을 정렬 합 니 다.
$ sort log > log.sorted &
1.2 nohup command & 백 스테이지 실행
이 방식 은 배경 에서 실행 되 는 command 프로그램 을 nohup 으로 관리 하 는 것 과 차이 가 있 습 니 다.이렇게 하면 백 엔 드 의 command 프로그램 이 터미널 에서 완전히 벗 어 날 수 있 습 니 다. 터미널 이 닫 혔 을 때 백 엔 드 의 command 프로그램 은 nohup 관리 하에 계속 실 행 됩 니 다.시간 이 많이 걸 리 는 프로그램 을 실행 하려 면 배경 프로그램 을 관리 하 는 것 을 권장 합 니 다.프로그램 이 실행 되 는 과정 에서 터미널 이 네트워크 속도 가 불안정 하거나 다른 원인 으로 갑자기 중단 되면 실행 중인 프로그램 이 중단 되 기 때문이다.사용 방법:
$ nohup longtime.sh &
프로그램 실행 과정 에서 의 정상 적 인 출력 과 오류 출력 은 프로그램 디 렉 터 리 의 nohup. out 파일 로 재 설정 되 었 습 니 다.출력 을 재 설정 할 파일 을 다음 과 같이 지정 할 수 있 습 니 다.
$ nohup longtime.sh > myout 2>&1 &
1.3 백 스테이지 작업 다 중 프로 세 스 실현
다 중 프로 세 스 가 필요 한 프로그램 블록 을 모두 command & 배경 으로 옮 겨 실행 하면 됩 니 다.
#!/bin/bash
start=`date +"%s"`
for (( i=0; i<10; i++ ))
do
{
echo "multiprocess"
sleep 3
} & #
done
wait #
end=`date +"%s"`
echo "time: " `expr $end - $start`
상기 방식 을 사용 하여 10 회 실행 과정 을 모두 배경 으로 실행 합 니 다.이 방식 은 프로그램의 다 중 프로 세 스 를 동시에 실행 할 수 있 지만 배경 에서 실행 되 는 프로 세 스 수 를 제어 할 수 없습니다.프로 세 스 수 제 어 를 실현 하기 위해 서 는 파이프 와 파일 설명 자 를 사용 해 야 합 니 다.
2 fifo 파이프 로 다 중 프로 세 스 관리
2.1 파이프
파 이 프 는 프로그램 간 의 데이터 공유 에 사용 할 수 있 지만 주의해 야 할 것 은 이런 데이터 공 유 는 단 방향 이다.파 이 프 는 두 가지 로 나 뉘 는데 익명 의 파이프 와 유명한 파이프 로 유명 파이프 만 논의 된다.파이프 의 특징: 1. 파이프 의 양 끝 을 연결 하 는 두 개의 프로그램 이 필요 합 니 다. 한 프로그램 은 파이프 에 데 이 터 를 쓰 고 다른 프로그램 은 파이프 에서 데 이 터 를 가 져 옵 니 다.2. 데 이 터 를 쓰 는 프로그램 만 있 을 때 기록 작업 은 다른 프로그램 이 파이프 에서 데 이 터 를 읽 을 때 까지 차단 상 태 를 처리 합 니 다.마찬가지 로 읽 는 프로그램 만 있 을 때 읽 기 동작 도 계속 막 힌 상태 에 있 습 니 다. 다른 프로그램 이 파이프 에 데 이 터 를 쓸 때 까지 3. 파이프 에 데이터 가 없 을 때 데 이 터 를 가 져 오 는 프로그램 이 막 히 고 데 이 터 를 쓰 는 프로그램 이 파이프 에 데 이 터 를 쓸 때 까지 막 힙 니 다.
유명 파 이 프 는 fifo 라 고 불 리 는 다음 과 같은 특징 이 있 습 니 다. 1. fifo 는 이름 을 가지 고 있 으 며 파일 시스템 에 존재 합 니 다. 2. fifo 양 끝 에 읽 기와 쓰기 프로그램 이 동시에 존재 하지 않 는 한 fifo 의 데이터 흐름 은 3. fifo 는 mkfifo 와 같은 명령 으로 생 성 됩 니 다. 익명 파 이 프 는 셸 이 자동 으로 4. fifo 는 양 방향 바이트 흐름 이 고 데이터 흐름 은 형식 이 없습니다.
2.2 fifo 를 사용 하여 셸 다 중 프로 세 스 관리
직접 코드:
1 #!/bin/bash
2
3 if [ $# -ne 1 ]
4 then
5 echo Usage: split.sh 201610
6 exit 1
7 else
8 month=$1
9 fi
10 len=`echo $month | wc -L`
11 if [ $len != "6" ]
12 then
13 echo "err> The lenght of month is not valid ..."
14 fi
15
16
17 fp_out="/opt/log_combine/"
18 fp_tmp="/opt/log_combine/tmp/"
19 fp_in="/opt/tag_log/tag.log."
20
21 #
22 fns=`ls $fp_in$month*.gz`
23 if ls $fns >> log.split4month
24 then
25 echo "split the log begin!"
26 else
27 echo "err> can't find the file $fns"
28 exit 1
29 fi
30
31 trap "exec 1000>&-;exec 1000$tmpfifo
36 rm -fr $tmpfifo
37
38 thread_num=`grep "processor" /proc/cpuinfo | sort -u | wc -l`
39
40 for (( i=0; i&1000
43 done
44
45 for fn in $fns
46 do
47 fn_tmp=${fn##*/}
48 read -u1000
49 {
50 echo `date` $fn "begin!"
51 zcat $fn | gawk -F"\001" 'NF==6{
52 if($1~/\./){
53 suf = substr($1, index($1, ".")-1, 1)
54 }else{
55 suf = substr($1, length($1))
56 }
57
58 if(suf~/[0-9a-f]/){
59 print $1"\001"$2"\001"$4"\001"$6 >> "'$fp_tmp$fn_tmp'_" suf "_split"
60 #}else{
61 # print $0
62 }
63 }'
64 echo `date` $fn "end!"
65 echo >&1000
66 } &
67 done
68 echo "done !!!!!!"
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.