![1 つのシェルスクリプトに対して 2 つのプロセスがリストされていますか?](https://rvso.com/image/1419604/1%20%E3%81%A4%E3%81%AE%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%202%20%E3%81%A4%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%8C%E3%83%AA%E3%82%B9%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
かなり単純なことを行うシェル スクリプトがあります。
#!/bin/sh
do something boring...
このようなシェルスクリプトを実行すると、
$ nohup sh mysh.sh > /null/dev/ 2>&1 &
2 つのプロセスがリストされていることがわかります。
$ ps -ef | grep mysh
... xxxxx 1 ... sh mysh.sh // same xxxxx
... yyyyy xxxxx ... sh mysh.sh // same xxxxx
これは正常ですか?
答え1
ここであなたが書いたものを再作成し、do something boring...
に置き換えたsleep 10000
ところ、この問題は発生しませんでした。子プロセスを作成するために fork() または clone() を使用する操作を行っているのだと思います。nohup がプロセスを子プロセスとして実行したのではないかと疑っていましたが、そうではないようです。
答え2
ご覧のとおり、yyyyy は xxxxx の子プロセスです。同じシェル スクリプトが「mysh.sh」内で実行され、このようなシナリオが発生することはまったく正常です。
スクリプト内で直接的または間接的に mysh.sh を呼び出していますか? これが起こる可能性があるのは、この方法だけだと思います。