これは愚かな質問かもしれません。 Linux用に書かれたプログラム(Golangで書かれたなど)は、システムコールを呼び出して他のプログラムを直接実行できますか?それとも、まずシェルを呼び出して別のプログラムを実行する必要がありますか?私のポイントは、現在のプログラムを置き換えることではありません。 Webサーバーが存在し、program1
継続的に実行されていると仮定すると、program2
カーネルに直接アクセスし、関連するシステムコールを使用して実行できますか、それとも最初にシェルを介して実行されますか?シェルを使用していない場合、特定のタスクを実行するためにプログラムでシェルを使用する必要がある特定の状況はありますか?それでは、それは何ですか?どんな情報でも大変感謝いたします。
答え1
シェルを仲介者として使用せずにプログラムを実行できますか?
例:シェルを起動するのとまったく同じ方法です。
使用exec
: しかし、これは現在のプロセスを置き換えます。
使用法fork
:新しいプロセスを作成してexec
交換します。シェルは他の便利なシステムコールを使用します。pipe
:パイプラインを作成します。dup
:パイプをstdin
またはに接続しますstdout
。
通常、これを行うことができるより高いレベルのライブラリがあります。これにより、MicrosoftのWindowsなどの他のオペレーティングシステムでコードを実行できます。これらのシステムコールは複数の組み合わせです(たとえば、1つのcreate_process
呼び出しで)。
プロセスをフォークしてから交換するのが遅いようです。そうではありません。 MS-Windowsでスレッドを作成するよりも高速です。fork
非常に効率的です。ほとんどの作業を延期するので、通常は必要ありません。
他のプログラムでプログラムを実行するときにシェルを使用する必要がありますか?
シェルスクリプトの場合にのみ可能です。ただし、グロビング、リダイレクトなどのサービスを使用したい場合があります。私の考えでは、golanはこれを行うのに十分なライブラリを持っているので、シェルは必要ありません。