-- Start
当我们在 ksh 中执行一条命令时,在命令结束之前,我们能做的只有等待,如果命令需要运行很长时间,在这段时间内你还想干点别的,你可以通过下面的方式运行命令。
#!/bin/ksh # 在命令的末尾加上 & 表示在后台执行该命令 ls > /dev/null &
[1] 3106
[1]+ Done ls --color=auto > /dev/null
[1]+ Exit 2 ls --color=auto dd /dev/null
第一步,按 CTRL-Z 暂停命令,你会得到如下的输出。
[1]+ Stopped vi test.txt
bg %1
引用 进程 N 进程号 N -N 进程组号 N %N 作业号 N %string 以 string 开头的命令 %?string 包含 string 的命令 %+或%% 最后被调用的命令 %- 倒数第二被调用的命令
通常,当你退出登录时,你运行的所有命令,不管前台还是后台都会被终止,如果你想让某个命令在你退出登录时继续执行,试一试 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 信号杀死进程
ps -ef | grep 'vi test.txt' | grep -v grep
假设某个目录下有好多 SQL 文件,现在让你把它们都运行一遍,你可以采用如下的脚本。
#!/bin/ksh # 扫描所有的 SQL 语句并运行 for sql in $(ls *.sql) do runSQL ${sql}; done print "done";
#!/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