別のプロセスでディレクトリを変更できないのはなぜですか?

別のプロセスでディレクトリを変更できないのはなぜですか?

現在の作業ディレクトリを変更するプロセスを作成できないのはなぜですか?良いCD注文はどこにありますか?

ベストアンサー1

あなたが求めるものを考えてみてください。シェルがあり、シェルのcwdを変更する外部プログラムを作成しようとしています。これはまだ意味がありますか?私には、シェルが文字列を受け入れていくつかの子プロセス(自然に親プロセスシェルのcwdを継承する)を生成するプログラムにすぎないことをよく理解していないようです。

私はptraceを使ってシェルプロセスにコマンドを注入することでこれを達成できると思います。 「子wd」に対して異なる設定を維持する独自のシェルを作成できます(主な変更は、子をフォークした後にchdir()を覚えておく必要があることです)。任意のプロセスのcwdを強制的に変更できるカーネルモジュールを作成できますが、これは役に立つよりも多くの問題を台無しにすると予想されます。

このようなことが適切であれば、(適切な権限で) "ln -fs /somewhere /proc/$pid/cwd"を実行できます。 rootで試してみると、straceは「ln:cwd /:ディレクトリを上書きできません」というメッセージを表示します。ターゲットがすでに存在することを確認して表示するようです。この場合、シンボリックリンク()が失敗するようです。したがって、シンボリックリンクコマンドは最初に既存のリンクを削除する必要があり、カーネルはそれを許可しないと思います。

おすすめ記事