プログラムは仲介者としてのシェルなしで他のプログラムを実行できますか?

プログラムは仲介者としてのシェルなしで他のプログラムを実行できますか?

これは愚かな質問かもしれません。 Linux用に書かれたプログラム(Golangで書かれたなど)は、システムコールを呼び出して他のプログラムを直接実行できますか?それとも、まずシェルを呼び出して別のプログラムを実行する必要がありますか?私のポイントは、現在のプログラムを置き換えることではありません。 Webサーバーが存在し、program1継続的に実行されていると仮定すると、program2カーネルに直接アクセスし、関連するシステムコールを使用して実行できますか、それとも最初にシェルを介して実行されますか?シェルを使用していない場合、特定のタスクを実行するためにプログラムでシェルを使用する必要がある特定の状況はありますか?それでは、それは何ですか?どんな情報でも大変感謝いたします。

答え1

シェルを仲介者として使用せずにプログラムを実行できますか?

例:シェルを起動するのとまったく同じ方法です。

使用exec: しかし、これは現在のプロセスを置き換えます。

使用法fork:新しいプロセスを作成してexec交換します。シェルは他の便利なシステムコールを使用します。pipe:パイプラインを作成します。dup:パイプをstdinまたはに接続しますstdout

通常、これを行うことができるより高いレベルのライブラリがあります。これにより、MicrosoftのWindowsなどの他のオペレーティングシステムでコードを実行できます。これらのシステムコールは複数の組み合わせです(たとえば、1つのcreate_process呼び出しで)。

プロセスをフォークしてから交換するのが遅いようです。そうではありません。 MS-Windowsでスレッドを作成するよりも高速です。fork非常に効率的です。ほとんどの作業を延期するので、通常は必要ありません。

他のプログラムでプログラムを実行するときにシェルを使用する必要がありますか?

シェルスクリプトの場合にのみ可能です。ただし、グロビング、リダイレクトなどのサービスを使用したい場合があります。私の考えでは、golanはこれを行うのに十分なライブラリを持っているので、シェルは必要ありません。

関連情報