标签: pidof

为什么 pidof 和 pgrep 的行为不同?

我有一个 init 脚本/etc/init.d/myservice用于初始化这样的服务:

...
start() {
  ...
  daemon /usr/sbin/myservice
  ...
}

stop() {
  ...
  pgrep myservice
  pidof myservice
  ps -ef | grep myservice
  ...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试停止服务时,这是输出:

10000 10001
10000
root      10000     1  0 09:52 ?        00:00:02 /usr/sbin/myservice
root      9791   9788  0 10:06 pts/1    00:00:00 /bin/sh /sbin/service myservice stop
root      10001  9791  1 10:06 pts/1    00:00:00 /bin/sh /etc/init.d/myservice stop 
root      9805   9796  0 10:06 pts/1    00:00:00 grep myservice
Run Code Online (Sandbox Code Playgroud)

这是预期的吗?为什么pidof只返回我想要停止的服务的正确 PID 并pgrep返回服务 PID 和 init 脚本的 …

grep process init-script pidof

9
推荐指数
1
解决办法
1万
查看次数

如何正确轮询后台脚本的存在

我对以下类型的脚本有问题:

  #!/bin/sh

  long_running_script.sh &  

  while [ `pidof long_running_script.sh` ]
  do
    echo "."
    sleep 1
  done
Run Code Online (Sandbox Code Playgroud)

sript 将启动一个新脚本到后台,它应该打印点,直到后台脚本退出。它在 CPU 负载不高时工作。

但是,当 CPU 负载较高时,它不会工作:long_running_script.sh 将启动,但“父”脚本将在 long_running_script.sh 退出之前退出 while 循环。

似乎pidof是在 long_running_script.sh 真正启动(执行)之前执行的。

解决这个问题的最佳方法是什么?

在 while 语句之前 1 秒 sleep 没有帮助。所以我不想使用任何魔法延迟,因为它可能不可靠。

process shell-script pidof

5
推荐指数
1
解决办法
6772
查看次数

为什么 pidof 不起作用?

在 的输出中ps aux,我可以很好地看到该过程:

# ps aux | grep diff
root      7787 28.7  0.0   9368  4516 pts/3    D+   13:56  20:33 diff -qr mnt/mnt/md/ mnt/mnt2/
root     13130  0.0  0.0   6144   876 pts/4    S+   15:07   0:00 grep diff
Run Code Online (Sandbox Code Playgroud)

pidof声称找不到任何东西:

# pidof diff
# echo $?
1
Run Code Online (Sandbox Code Playgroud)

查看手册页,没有关于丢失进程时该怎么做的信息,pidof 有。/proc/7787/exe是一个符号链接/usr/bin/diff/usr/bin/diff它本身是一个常规文件和一个 ELF。根据手册页,这应该匹配。

process pidof

4
推荐指数
1
解决办法
2937
查看次数

如何格式化shell命令的输出

我结合toppidof命令:

top -p $(pidof <process_name>)
Run Code Online (Sandbox Code Playgroud)

如果pidof <process_name>返回一个 idtop命令有效。但是如果pidof <process_name>不止一个 idstop命令不起作用。

pidof 返回 ID 之间有一个空格,例如: 123 124 125

如果我可以用逗号之类的123, 124, 125 top命令获取这些 id就可以了。如何更改 的输出格式pidof

我知道awk用于格式化文本数据。但是我找不到如何awk用于 shell 命令的结果。

shell top pidof

1
推荐指数
1
解决办法
2675
查看次数

标签 统计

pidof ×4

process ×3

grep ×1

init-script ×1

shell ×1

shell-script ×1

top ×1