4
シェルでファイルを実行するとどうなりますか?
だから、私はこれをよく理解していると思ったが、テストを実行して(誰かに反対した会話に応じて)、私の理解に欠陥があることがわかりました... 可能な限り詳細に、シェルでファイルを実行すると正確に何が起こるのでしょうか?私が意味するのは、./somefile some argumentsシェルに入力somefileしてreturnキーを押すと(そしてcwdに存在し、読み取りと実行の許可がありますsomefile)、フードの下で何が起こるのですか? 私が考えた答えでした。 シェルはにsyscallを作成しexec、パスを渡しますsomefile カーネルが調べsomefileではとルックスのマジックナンバーファイルのそれは、プロセッサが処理できる形式であるかどうかを判断します ファイルがプロセッサが実行できる形式であることをマジック番号が示している場合、 新しいプロセスが作成されます(プロセステーブルのエントリを使用) somefile読み取り/メモリにマップされます。スタックが作成され、実行のコードのエントリポイントにジャンプされるsomefileと、ARGVパラメータの配列に初期化(char**、["some","arguments"]) マジック番号がある場合シェバング次いで、exec()上記のように、新しいプロセスを生成するが、実行可能な使用は、インタプリタシェバング(例えばによって参照され/bin/bash又は/bin/perl)とsomefileに渡されSTDIN ファイルに有効なマジックナンバーがない場合、「無効なファイル(不良なマジックナンバー):Execフォーマットエラー」などのエラーが発生します。 ただし、ファイルがプレーンテキストの場合、シェルはコマンドを実行しようとします(入力したかのように)と誰かに言われましたbash somefile。私はこれを信じていませんでしたが、試しただけで、それは正しかったです。ですから、ここで実際に何が起こっているのかについて誤解があり、その仕組みを理解したいと思います。 シェルでファイルを実行するとどうなりますか?(詳細は合理的です...)