用户运行的命令的进程 ID

用户运行的命令的进程 ID

考虑我只运行一些基本命令..

ls

现在上面的命令在执行时会有 pid 吗?如果是,那么我如何确定该pid?

当我尝试时

echo $!

在 ls 命令之后,它返回空输出。

而如果我执行

ls &

进而

echo $!

现在它给了我 ls 命令的 pid。

实际上,当我查看下面的审计日志时,我得到了这个问题。

type=USER_CMD msg=audit(12/16/2014 17:15:36.201:68342) : user pid=19247 uid=enginst auid=enginst ses=4229 msg='cwd=/apps/oradump/ora_temp_rdbms/OH3 cmd=chmod -R 777 11203 terminal=pts/2 res=success'
type=USER_CMD msg=audit(12/16/2014 17:36:33.968:68753) : user pid=1801 uid=enginst auid=enginst ses=4229 msg='cwd=/apps/oracle/RDBMS cmd=chmod -R 777 11203 terminal=pts/2 res=success'

这里,上面的日志显示“chmod -R 777”已由用户 enginst 运行,并且还有一个 pid。

现在,我可以得出结论,chmod 命令已由用户显式运行,因为auditd 日志不显示ppid(父进程ID),如果某些脚本/程序启动了它,就会出现这种情况?

不过,我现在已经打开流程会计来检查上述内容。但无论哪种方式,我的问题都是......

像 chmod、ls 这样的命令在执行时会得到 pid 吗?或没有?或者当它在后台运行时而不是在前台运行时它会得到一个pid?

答案1

每个外部命令和每个子 shell 都有自己的 PID。 Shell 内置函数没有。

我不知道有任何功能可以为您提供刚刚退出的同步命令的 PID。当然,您可以这样运行所有命令:

command & pid=$!; fg

相关内容