网站建设中端口号的作用是什么,郑州建设信息网可以领证书吗,怎么在手机上制作软件,需要登陆的网站如何做爬虫概览
每当我们在Bash shell 中运行任何命令时#xff0c;默认情况下都会创建一个子 shell#xff0c;并生成#xff08;分叉#xff09;一个新的子进程来执行该命令。但是#xff0c;当使用 exec时#xff0c;exec 后面的命令将替换当前 shell。这意味着不会创建任何子 …
概览
每当我们在Bash shell 中运行任何命令时默认情况下都会创建一个子 shell并生成分叉一个新的子进程来执行该命令。但是当使用 exec时exec 后面的命令将替换当前 shell。这意味着不会创建任何子 shell并且当前进程将替换为此新命令。
进程替换实验 先查看当前shell的PID jagitchjagitch-MS-7B93:tmp$ echo $$
280513打开第二个shell查看shell 1的进程信息 jagitchjagitch-MS-7B93:tmp$ ps -aef | grep 280513
jagitch 280513 22748 0 11:37 pts/0 00:00:00 bash
jagitch 281157 273610 0 11:38 pts/1 00:00:00 grep --colorauto 280513在shell 1中执行exec命令 jagitchjagitch-MS-7B93:tmp$ exec sleep 40在shell 2中再次查看shell 1的进程信息 jagitchjagitch-MS-7B93:tmp$ ps -aef | grep 280513
jagitch 280513 22748 0 11:37 pts/0 00:00:00 sleep 40
jagitch 281573 273610 0 11:38 pts/1 00:00:00 grep --colorauto 280513此时发现280513这个进程由之前的bash替换成了sleep 40说明exec执行地命令不会创建子进程而是替换掉当前进程的程序。这样可以达到节约计算机资源的目的。 等shell 1中地exec命令结束后发现shell 1退出了此时在shell 2中查看shell 1的进程ID jagitchjagitch-MS-7B93:tmp$ ps -aef | grep 280513
jagitch 281749 273610 0 11:39 pts/1 00:00:00 grep --colorauto 280513此时发现shell 1那个进程已经被销毁了因为默认的bash进程被exec替换为了sleep命令这个命令执行完后就会退出而之前那个shell进程会一直循环解释执行用户输入的命令它不会退出被销毁。
exec的常用用法 脚本中进行命令替换 jagitchjagitch-MS-7B93:tmp$ cat ./execdemo.sh
#!/bin/bashecho first
exec echo second
echo lastjagitchjagitch-MS-7B93:tmp$ chmod x ./execdemo.sh
jagitchjagitch-MS-7B93:tmp$ ./execdemo.sh
first
second我们可以发现last没有被输出因为./execdemo.sh在一个子进程中执行第一个echo正常输出但是遇到exec echo second后这个子进程就被替换成echo second了执行完这条命令该进程就退出销毁了自然就不会执行后面的echo last了。 使用exec进行日志记录 jagitchjagitch-MS-7B93:tmp$ cat execlog.sh
#!/bin/bashLOG_FILEoutput.logexec $LOG_FILEecho 1. script started at $(date %Y-%m-%d)echo 2. find all .txt files in current dir
find -type f -name *.txtecho 3. make some error
cat helloecho 4. script finished at $(date %Y-%m-%d)jagitchjagitch-MS-7B93:tmp$ bash execlog.sh
jagitchjagitch-MS-7B93:tmp$ cat output.log
1. script started at 2024-06-28
2. find all .txt files in current dir
./2.txt
./1.txt
./favorite colors.txt
3. make some error
cat: hello: 没有那个文件或目录
4. script finished at 2024-06-28execlog.sh脚本中使用exec $LOG_FILE将标准输出和标准错误都重定向到指定地文件中。 使用exec操作文件描述符 jagitchjagitch-MS-7B93:tmp$ cat execfd.sh
#!/bin/bashexec 3 fruit.txt
exec 13
echo apple
echo orange
exec 3-
jagitchjagitch-MS-7B93:tmp$ bash execfd.sh
jagitchjagitch-MS-7B93:tmp$ cat fruit.txt
apple
orangeexec 3 fruit.txt将文件描述符重定向到fruit.txt文件 exec 13把标准输出重定向到文件描述符为3的文件中 exec 3-的意思是关闭文件描述符 每一次点赞都是你独特的味道。每一次关注都是我前行的动力。感谢有你一起成长
推荐阅读
1. 互联网、因特网和万维网傻傻分不清一文带你彻底理解计算机中的各种网络
2. 十分钟带你入门Go语言(Golang)开发
3. 超级详细的Github双重验证开启教程github Two-factor authentication