Linux bash fork 进程 (inotifywait)

Linux bash fork 进程 (inotifywait)

我有一个正在运行的 bash 脚本正在分叉。它看起来像这样:

#!/bin/bash
/usr/bin/killall inotifywait

/usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder1/ | while IFS= read -r FILE; do /bin/chmod 770 "$FILE"; done >/dev/null 2>&1 &
/usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder2/ | while IFS= read -r FILE; do /bin/chmod 770 "$FILE"; done >/dev/null 2>&1 &
/usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder3/ | while IFS= read -r FILE; do /bin/chmod 770 "$FILE"; done >/dev/null 2>&1 &
/usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder4/ | while IFS= read -r FILE; do /bin/chmod 770 "$FILE"; done >/dev/null 2>&1 &

如果我运行该脚本,它会创建 8 个进程:

  • /usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder1/...
  • /bin/bash ./脚本名.sh
  • /usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder2/...
  • /bin/bash ./脚本名.sh
  • /usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder3/...
  • /bin/bash ./脚本名.sh
  • /usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder4/...
  • /bin/bash ./脚本名.sh

为什么它不这样分叉呢?

  • /bin/bash ./脚本名.sh
    • /usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder1/...
    • /usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder2/...
    • /usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder3/...
    • /usr/bin/inotifywait -mrq -e CREATE --format %w%f /home/sftp/folder4/...

谢谢你的回答,星际飞行者

答案1

您正在将 inotifywait 的输出传输到 while 循环中。此上下文中的 while 循环将在子 shell 中运行,这就是这些额外的 bash 进程。

相关内容