如何知道前叉是否已执行?

时间:2019-04-11 17:35:35

标签: linux bash

所以我想知道,对于正在运行的进程,特定的进程只是一个分支,还是实际上是一个执行程序。

理想情况下,我试图识别那些是bash / sh内部命令的进程。我知道我不知道命令是什么,但是至少我不会打印出一些愚蠢的东西……

  PID COMMAND                                               PPID   GID GROUP      PGRP  TPGID    SID   TGID
61860              `- -bash                                61859  1004 gem       61860  91242  61860  61860
91242                  `- /bin/bash ./silly.sh 1 2 3       61860  1004 gem       91242  91242  61860  91242
91243                      `- cat                          91242  1004 gem       91242  91242  61860  91243
91244                      `- /bin/bash ./silly.sh 1 2 3   91242  1004 gem       91242  91242  61860  91244

因此,在内部,这个愚蠢的脚本将cat传递到read,并且read是内部命令,但是我在这里看不到足够的信息来知道第二期bash silly有点特别。是的,有pgrp id,但是cat具有相同的pgrp!

也许我可以确定grp id和命令行是相同的,并且指示内部命令,但是还有什么更好的方法吗?

我遇到的第二种情况更加棘手。这里的脚本文件没有shebang。否则,相同的脚本,相同的顶部输出,除了我首先创建了一个bash -v shell:

  PID COMMAND                                               PPID   GID GROUP      PGRP  TPGID    SID   TGID
61860              `- -bash                       61859  1004 gem       61860  15761  61860 ..4.....  61860
15694                  `- bash -v                 61860  1004 gem       15694  15761  61860 ..4.....  15694
15761                      `- bash -v             15694  1004 gem       15761  15761  61860 ..4...4.  15761
15762                          `- cat             15761  1004 gem       15761  15761  61860 ..4.....  15762
15763                          `- bash -v         15761  1004 gem       15761  15761  61860 ..4...4.  15763

因此,现在我有3个级联过程,全部都声称是bash -v,这显然在任何报告中都是无稽之谈。我知道我所做的是运行一个脚本并运行一个内部命令,并且至少要说[internal / script],我想对它进行清理,但是我如何确定呢?

我已经挖了,除了PPID和GPID似乎没有很多线索

有什么想法吗?我在某处缺少旗帜吗?

我猜想,因为我对bash特别感兴趣,所以有可能使用bash或sh解决方案,而不是使用o / s解决方案?

0 个答案:

没有答案