質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

1回答

766閲覧

inotifywatchのプロセスについて

Tsukasa

総合スコア8

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2017/09/27 00:16

###前提・実現したいこと
centos7にsambaをインストールして、ホットフォルダを作成しています。
フォルダの監視にはinotify-toolsを用いて監視を行っています。
監視処理はシェルにして、systemdでデーモン化しています。

###発生している問題・エラーメッセージ

シェルのプロセスが二つあり、なぜ二つあるのか分からない。 systemctl status watch_file ~(省略)~ Active: active (running) since 水 2017-09-27 05:01:01 JST; 3h 20min ago Main PID: 14890 (watch_file.sh) CGroup: /system.slice/watch_file.service ├─14890 /bin/bash /home/sh/watch_file.sh ├─14892 inotifywait -e CLOSE_WRITE -m /home/share/watch... └─14893 /bin/bash /home/sh/watch_file.sh ~(省略)~ ps aux | grep watch_file usrname 14890 0.0 0.0 115244 1492 ? Ss 05:01 0:00 /bin/bash /home/sh/watch_file.sh usrname 14893 0.0 0.0 115244 396 ? S 05:01 0:00 /bin/bash /home/sh/watch_file.sh

###該当のソースコード

watch_file.sh

shell

1#!/bin/bash 2 3trap "exit 0" 3 # QUITシグナルで停止 4 5w_dir=/home/share/watch 6 7# 監視 8inotifywait -e CLOSE_WRITE -m ${w_dir} --format "%w %f" | \ 9while read LINE; do 10 11 # --format指定した通りに変数に格納 12 declare -a eventData=(${LINE}) 13 dirPath=${eventData[0]} 14 fileName=${eventData[1]} 15 16 # ファイルネームを元にロックファイルを作る 17 ext="xml" 18 efNameOnly=`basename "$fileName" ".$ext"` 19 20 lockfile=/home/tmp/$efNameOnly 21 22 item=$dirPath$fileName 23 24 # ロックファイルがある 25 if [ -f ${lockfile} ]; then 26 continue 27 else 28 # 監視対象のディレクトリにファイルがある 29 if [ -f ${item} ]; then 30 # ロックファイルを作る 31 touch $lockfile 32 # 処理 33 # wget ~(省略)~ 34 # ロックファイルを消す 35 rm -f $lockfile 36 fi 37 fi 38done

watch_file.service

shell

1[Unit] 2Description = watch file daemon 3 4[Service] 5ExecStart = /home/sh/watch_file.sh 6Restart = always 7Type = simple 8 9[Install] 10WantedBy = multi-user.target

###試したこと
ためしにプロセスをkillしてみましたが、エラーを吐いて終了してしまいました。

###補足情報(言語/FW/ツール等のバージョンなど)
CentOS 7
inotify-tools

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

パイプで起動したコマンドはサブシェルで実行されるので、psからは別のプロセスとして見えているのだと思います。
以下のようなコードで試してみました。

sh

1#!/bin/sh 2 3while :; do 4 date +%s 5 sleep 1 6done | 7while read l; do 8 echo ${l} 9done

2個目3個目の/bin/sh ./while.shのPPIDを見ると、1280になっているので、PID=1280のプロセスからforkされたことがわかります。

shell

1$ ps -ao pid,ppid,pgid,command 2 PID PPID PGID COMMAND 3 675 291 675 login -pf miminashi 4 676 675 676 -bash 5 1280 676 1280 /bin/sh ./while.sh 6 1281 1280 1280 /bin/sh ./while.sh 7 1282 1280 1280 /bin/sh ./while.sh

(っていう話をしているのではなかったらすみません)

投稿2018/10/06 23:39

miminashi

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問