linux shell防止ps,linux – 为什么(ps -f)不创建子shell但只创建一个单独的进程?

我需要一些帮助,因为我没有得到任何东西.从我从Internet读取的内容,当我们执行shell脚本或者在括号中运行命令时,会创建一个子shell :()

我尝试使用仅包含以下命令的脚本来测试它:

ps -f

当我运行它时,我看到以下结果:

ID PID PPID C STIME TTY TIME CMD

me 2213 2160 0 08:53 pts/14 00:00:00 bash

me 3832 2213 0 18:41 pts/14 00:00:00 bash

me 3833 3832 0 18:41 pts/14 00:00:00 ps -f

哪个好,因为我看到我的bash进程为我的脚本产生了另一个bash进程.

但当我这样做时:

( ps -f )

它产生:

UID PID PPID C STIME TTY TIME CMD

me 2213 2160 0 08:53 pts/14 00:00:00 bash

me 3840 2213 0 18:46 pts/14 00:00:00 ps -f

因此,如果括号产生子shell,为什么它不会显示在进程中?为什么ps -f被算作另一个过程?每个命令都作为一个单独的进程运行吗?

解决方法:

看来你已经在一点点优化中抓住了bash.如果子shell只包含一个命令,为什么要真正使它成为子shell?

$( ps -f )

UID PID PPID C STIME TTY TIME CMD

jovalko 29393 24133 0 12:05 pts/10 00:00:00 bash

jovalko 29555 29393 0 12:07 pts/10 00:00:00 ps -f

但是,添加第二个命令,例如:( bash null命令,什么都不做),这是结果:

$( ps -f ; : )

UID PID PPID C STIME TTY TIME CMD

jovalko 29393 24133 0 12:05 pts/10 00:00:00 bash

jovalko 29565 29393 0 12:08 pts/10 00:00:00 bash

jovalko 29566 29565 0 12:08 pts/10 00:00:00 ps -f

使用子shell的主要原因之一是您可以对一组命令执行I / O重定向等操作而不是单个命令,但如果您的子shell只包含一个命令,则没有太多理由真正分叉新的bash进程第一.

至于计数作为一个过程,它会有所不同.您使用的许多命令,如ls,grep,awk都是外部程序.但是,也有内置像cd,kill等.

您可以使用type命令确定bash中的命令:

$type ps

ps is hashed (/bin/ps)

$type cd

cd is a shell builtin

标签:linux,shell,unix

来源: https://codeday.me/bug/20190830/1768657.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值