Linuxで基本的なシェルを趣味で書いています。プログラムの実行に取り掛かりたいのですが、その方法がわかりません。私はexecp()
そのさまざまな兄弟姉妹を見てきましたが、どうやらカーネルは現在実行中のプロセス(この場合は私のシェル)を削除し、新しいプロセスを続行するように強制されます。
つまり、基本的に必要なのは、などのコマンドを呼び出しls
たりcd
、実行してからシェルに戻ったりするために使用できる関数だけです。
すべての助けに感謝します。
ouahの答えは基本的に正しいですが、では機能しませんcd
。シェルはそれを組み込みコマンドとして実装する必要があります(つまり、シェルにはのコードが含まれている必要がありますcd
。
これは、fork
最初に現在のプロセス(この場合はシェルの実行中のインスタンス)の新しいコピーを作成するためです。次に、execは、実行する実行可能ファイルで新しいプロセスを上書きします。コマンドが終了すると、新しいプロセスは終了して終了します。これを使用するcd
と、新しいプロセスの作業ディレクトリは変更されますが、古いプロセス(シェル)の作業ディレクトリはまったく変更されません。
で新しいプロセスを作成してfork
から、を呼び出しますexec
。
次のようなものを使用します。
if (fork ()==0) {
execl ("/bin/sh",NULL);
}
これにより、新しいプロセス(すでに実行されているプロセスの正確なコピー)が作成され、新しいプロセスに置き換えられます。CPUが仮想メモリを完全にサポートしておらず、元のプロセスが非常に大きいため複製できない環境では、これにはいくつかの回避策が必要になる場合があることに注意してください。