ksh 다 중 프로 세 스
작업 제어
우리 가 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.