ksh 다 중 프로 세 스

4190 단어 shellksh
-- Start
작업 제어
우리 가 ksh 에서 명령 을 실행 할 때 명령 이 끝나 기 전에 우리 가 할 수 있 는 일 은 기다 리 는 것 뿐 입 니 다. 명령 이 오래 실행 되 어야 한다 면 그 동안 다른 일 을 하고 싶 으 면 아래 의 방식 으로 명령 을 실행 할 수 있 습 니 다.
#!/bin/ksh

# 在命令的末尾加上 & 表示在后台执行该命令
ls > /dev/null &

리 턴 을 누 르 면 다음 과 같은 출력 을 볼 수 있 습 니 다. 1 은 작업 번호 (Job Number), 3106 은 프로 세 스 번호 (Process ID) 를 표시 합 니 다.
[1] 3106

명령 이 실행 되면 다음 과 같은 출력 이 있 습 니 다.
[1]+  Done                    ls --color=auto > /dev/null

명령 이 잘못 실행 되면 다음 출력 을 볼 수 있 습 니 다. 2 는 오류 코드 를 표시 합 니 다.
[1]+  Exit 2                  ls --color=auto dd /dev/null

실행 중인 명령 을 백 스테이지 에 놓 고 실행 할 수 있 을 까?답 은 긍정 적 이다. 너 는 두 걸음 이 필요 하 다.
첫 번 째 단 계 는 CTRL - Z 일시 정지 명령 을 누 르 면 다음 과 같은 출력 을 얻 을 수 있 습 니 다.
[1]+  Stopped                 vi test.txt

두 번 째 단 계 는 다음 명령 을 실행 하여 배경 에 놓 고 실행 합 니 다.
bg %1

위의% 1 은 (는) 작업 번호 가 1 인 작업 을 표시 합 니 다.우 리 는 또한 아래 의 방식 을 통 해 프로 세 스 나 작업 을 인용 할 수 있다.
引用        进程
N           进程号 N
-N          进程组号 N
%N          作业号 N
%string	    以 string 开头的命令
%?string    包含 string 的命令
%+或%%      最后被调用的命令
%-          倒数第二被调用的命令

현재 어떤 프로 세 스 가 배경 에서 실행 되 고 있 는 지 확인 하려 면 jobs 명령 을 실행 할 수 있 습 니 다. 배경 명령 을 프론트 에 두 고 실행 하려 면 fg% N 을 시도 해 보 세 요.
보통 로그 인 을 종료 할 때 실행 하 는 모든 명령 은 프론트 데스크 든 백 스테이지 든 종 료 됩 니 다. 로그 인 을 종료 할 때 계속 실행 하려 면 disown% N 을 시도 해 보 세 요.물론 로그 인 을 종료 하 더 라 도 종료 되 지 않도록 다음 과 같은 방식 으로 명령 을 실행 할 수 있 습 니 다.
nohup ls > /dev/null &

프로 세 스 관리
많은 사람들 이 kill 명령 이 프로 세 스 를 죽 이 는 데 쓰 인 다 고 생각 합 니 다. 사실은 프로 세 스에 신호 (Signal) 를 보 내 는 데 사 용 됩 니 다. 프로 세 스에 어떤 신 호 를 보 낼 수 있 습 니까?다음 명령 을 시험 해 보 세 요.
kill -l

结果如下:
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

다음은 간단 한 예 들이다. 
# 3106 是进程号,我们也可以通过作业号,命令名引用进程
kill 3106 # 发送 TERM 信号终止进程
kill -15 3106 # 同上
kill -s TERM 3106 # 同上

kill -s INT 3106 # 发送 INT 信号中断进程,同 CTRL-C
kill -s QUIT 3106 # 发送 QUIT 信号退出进程
kill -s KILL 3106 # 发送 KILL 信号杀死进程

위 에서 언급 한 jobs 명령 은 현재 셸 이 시작 하 는 프로 세 스 만 조회 할 수 있 습 니 다. 모든 프로 세 스 를 보 려 면 ps 명령 을 사용 할 수 있 습 니 다.다음은 간단 한 예 다.
ps -ef | grep 'vi test.txt' | grep -v grep

다 중 프로 세 스
어떤 디 렉 터 리 에 SQL 파일 이 많다 고 가정 하면 지금 은 모두 실행 하 라 고 합 니 다. 다음 과 같은 스 크 립 트 를 사용 할 수 있 습 니 다.
#!/bin/ksh  

# 扫描所有的 SQL 语句并运行
for sql in $(ls *.sql)
do
	runSQL ${sql};
done
print "done";

일부 SQL 은 오래 실행 되 어야 하기 때문에 이 스 크 립 트 는 매우 느 립 니 다. 사실은 모든 SQL 파일 을 동시에 실행 할 수 있 습 니 다. 다음 과 같 습 니 다.
#!/bin/ksh

function clean {
	print "received interrupt signal.";
	# disconnect db and clean tmp file etc
	exit;
}

# trap 表示如果收到 INT,TERM 或  QUIT 信号就运行函数 clean
trap 'clean' INT TERM QUIT

# 扫描所有的 SQL 语句并运行
for sql in $(ls *.sql)
do
	# 在后台运行 SQL 语句
	runSQL ${sql} &;
done

# wait 命令等待所有后台命令执行完毕
wait;
print "done";

-- 더 많은 참조: ksh 훌륭 하 다
-- 성명: 전재 출처 를 밝 혀 주 십시오.
-- Last Updated on 2015-10-12 -- Written by ShangBo on 2015-10-11 -- End

좋은 웹페이지 즐겨찾기