「execve」呼び出し中に権限のないプロセスのどの属性が保存されますか?

「execve」呼び出し中に権限のないプロセスのどの属性が保存されますか?

私はオペレーティングシステムのコースを教えており、新しいプロセスを作成する技術に集中しようとしていますforkexecve

私が現在知っているのは、フォークが以前のプロセスの完全なコピーを作成し、新しいPIDと親/子関係を確立しますが、それ以外はほとんど実行しないことです。

一方、子プロセスが作成されたら、execveを実行してほとんどのメモリを新しいプロセスに置き換えます。たとえば、プログラムコード、スタック、ヒープをすべて置き換え、新しいプログラムで最初から始めます。

しかし、すべてが新しいプロセスに置き換えられるわけではありません。子プロセスは、ファイル記述子(execveの前にパイプを設定できます)、プロセスID(PID)、およびユーザーID(UID)を継承します。一部の権限マニュアルページ)。

execve呼び出しで置き換えられていない属性の完全なリストはかなり長いようですが、(上記のものが欠けているような)他の主要な属性はありますか?

ベストアンサー1

私たちはLinuxについて具体的に話しています(少なくともLinuxを使用しているので、それがあなたが望むものだと思います)。商標)、forkそしてexecveマニュアルページは、すべての属性をリストする適切な参照です。いいえ保存してください。この動作のほとんどはPOSIXで指定されていますが、いくつかのLinux属性もあります。

マニュアルページには、次の属性は表示されません。はい予約しますが、そうでないことに集中してください。

execve()以下の属性を除くすべてのプロセス属性は、その期間中に保持されます。

など。

私はあなたが持っているすべての属性をリストしてあなたの質問に答えようとはしません。しかし、まだリストされていない保存された主な属性の1つを指摘します。無視および基本信号は、execve親が信号(少なくとも無視できる信号)を無視でき、その動作が伝播されることを意味します。どんな子供にも。これがnohup仕事を許可することです。

exec()fork()または、セクション28.4では、プロセス属性の完全なリストと、プロセス属性に何が起こるかについての説明を見つけることができます。Linuxプログラミングインターフェース

おすすめ記事