셸 스 크 립 트 (다 중 스 레 드 대량 생 성 사용자)

                                    셸 스 크 립 트 의 다 중 스 레 드
        많은 장면 에서 다 중 스 레 드 를 사용 합 니 다. 예 를 들 어 백업 데이터 베 이 스 는 100 개의 라 이브 러 리 가 있 고 정상 적 인 백업 효율 이 매우 낮 습 니 다.다 중 스 레 드 가 있 으 면 백업 하 는 데 10 시간 이 걸 릴 수도 있 었 는데 지금 은 10 개의 스 레 드 로 나 누 어 동시에 하면 한 시간 이면 해결 된다.오늘 은 셸 에서 다 중 스 레 드 를 어떻게 사용 하여 조작 을 완성 하고 우리 의 효율 을 향상 시 키 는 지 소개 합 니 다.
우선 우 리 는 다음 과 같은 지식 을 알 아야 한다.
1. 파일 설명자
[root@localhost ~]# touch file1         #파일 만 들 기
[root@localhost ~]# exec 6<> file1   #현재 프로 세 스 번호 에 파일 설명자 6 을 exec 방식 으로 잃 어 버 립 니 다. 관련 파일 은 file 1 입 니 다.
[root@localhost ~]# ll/proc/$$/fd    #현재 프로 세 스 번호 의 파일 설명 자 를 봅 니 다.
total 0
lrwx------ 1 root root 64 Jun 19 13:38 0 ->/dev/pts/0
lrwx------ 1 root root 64 Jun 19 13:38 1 ->/dev/pts/0
lrwx------ 1 root root 64 Jun 19 13:38 2 ->/dev/pts/0
lrwx------ 1 root root 64 Jun 19 13:39 255 ->/dev/pts/0
lrwx------ 1 root root 64 Jun 19 13:38 6 ->/root/file1    #우리 가 잃 어 버 린 파일 설명자, file 1 파일 과 연결 되 어 있 습 니 다.
[root@localhost ~]# echo "this is test file">/proc/$$/fd/6       #현재 프로 세 스 번호 의 파일 설명자 6 에 내용 을 기록 합 니 다.
[root@localhost ~]# cat file1     #file 1 파일 을 보 니 파일 설명자 에 기 록 된 내용 과 일치 합 니 다.
this is test file
===================================================================================
[root@localhost ~]# rm -rf file1   #파일 파일 삭제 1
[root@localhost ~]# ll/proc/$$/fd/6    #현재 프로 세 스 번호 에 있 는 파일 설명자 6 의 상 태 를 보십시오. file 1 파일 의 상 태 를 알 아 보기 어렵 지 않 습 니 다.
lrwx------ 1 root root 64 Jun 19 13:38/proc/14530/fd/6 ->/root/file1 (deleted)
[root@localhost ~]# cp  /proc/$$/fd/6 file1   #파일 설명자 복사 6 은 file 1 입 니 다.
[root@localhost ~]# cat file1   #file 1 파일 을 보 세 요. 내용 은 삭제 와 마찬가지 로 변 하지 않 습 니 다.한 가지, 이 복 원 된 file 1 파일 은 더 이상 원래 의 것 이 아 닙 니 다. 파일 설명자 상태 가 여전히 deleted 이기 때 문 입 니 다.
this is test file
[root@localhost ~]# exec 6
==================================================================================
2. 명명 파이프
[root@localhost ~]# ls *.txt | grep test  #  | 우 리 를 위 한 익명 파이프
test2.txt
test.txt
[root@localhost ~]# mkfifo file-fifo   #이름 파이프 파일 file - fifo 만 들 기
[root@localhost ~]# file file-fifo        #파일 형식 을 name pipe 로 보고 파이프 파일 을 명령 합 니 다. 1. 가 져 오 면 바로 사용 하고 다 쓰 면 사라 집 니 다. 2. 먼저 나 가 는 것 이 특징 입 니 다.
file-fifo: fifo (named pipe)
==============================================================================
\# 두 개의 터미널 테스트 를 시작 합 니 다.
\# 터미널 1
[root@localhost ~]# grep "vd"file-fifo 
\# 터미널 2
[root@localhost ~]# ls/dev/> file-fifo
터미널 2 를 조작 한 후에 터미널 에서 바로 결과 가 나타 나 는 것 을 발견 할 수 있 습 니 다. 그러나 grep "vd"를 다시 시작 할 때 아무런 결과 가 없습니다. 이것 이 바로 파이프 파일 의 특징 입 니 다. 즉, 가 져 오 거나 사용 하고 사라 지 는 것 입 니 다.
==================================================================================
위의 두 가지 지식 점 을 보고 우리 스 크 립 트 의 본론 으로 들 어가 다 중 스 레 드 를 어떻게 실현 하 는 지.
스 크 립 트 는 다음 과 같 습 니 다:
#!/bin/bash
##################
#多线程批量创建用户
#dingxiang
##################
#定义20个线程,以及fifo文件名称
thread=20
file=$(pwd)/file_thread
#创建fifo文件,丢个文件描述符6进去,把fifo文件删掉
mkfifo $file
exec 6<> $file
rm -rf $file

#向文件描述符6中写入20个空行
for i in `seq $thread`
do
        echo >&6
done

#创建alice1-alice500个用户
for j in `seq 500`
do
#read -u 读文件描述符6
        read -u 6
#创建用户,因为每次拿20个空行,所以创建完之后再还20个空行回去
        {
        useradd alice$j
        echo "123123" | passwd --stdin alice$j  &>/dev/null
        echo "alice$j creat....."
        echo >&6
        }&
done
#等待上面所有的操作结束
wait
#释放文件描述符,echo;all is ok
exec 6>&-
echo "all is ok......."

스 크 립 트 를 실행 하면 사용자 가 성공 적 으로 만 들 었 다 는 힌트 는 한 그룹 씩 나 오 는 것 이지, 한 그룹의 힌트 가 아 닙 니 다.
사실 이것 은 진정한 의미 의 다 중 스 레 드 가 아니 라 위 다 중 스 레 드 일 뿐 실제 장면 에서 정말 좋 습 니 다.

좋은 웹페이지 즐겨찾기