タグ付けされた質問 「fork」

6
プロセスの子孫
プロセスコンテナを構築しようとしています。コンテナは他のプログラムをトリガーします。たとえば、「&」を使用して実行中のバックグラウンドタスクを起動するbashスクリプト。 私が望んでいる重要な機能はこれです:私がコンテナを殺すとき、その下にスポーンされたすべてのものが殺されるべきです。直接子供だけでなく、その子孫も。 このプロジェクトを始めたとき、プロセスを強制終了すると、その子も自動的に強制終了されると誤って信じていました。私は同じ間違った考えを持っていた人々からのアドバイスを求めてきました。信号をキャッチして子供に殺害を伝えることは可能ですが、ここでは探していません。 xtermを閉じると、その中で実行されていたものはすべて、nohup'dされない限り殺されるので、私は達成したいものを信じています。これには、孤立したプロセスが含まれます。それが私が再現したいものです。 私が探しているのは、Unixセッションに関するものだと思います。 プロセスのすべての子孫を識別する信頼できる方法があれば、それらにも任意のシグナルを送信できると便利です。例:SIGUSR1。

4
子プロセスにパスワードを渡す方法は?
(私のプログラムから開始された子プロセスに)コマンドラインでパスワードを渡すことは、安全ではないことが知られています(psコマンドで他のユーザーでも見ることができるため)。代わりに環境変数として渡すことはできますか? それを渡すために他に何を使用できますか?(環境変数を除く)最も簡単な解決策はパイプを使用するようですが、この最も簡単な解決策は簡単ではありません。 Perlでプログラムします。

4
forkとexecはどのように機能しますか?
私はあまり経験がなく、ユーザーレベルからハードウェアにどのように解釈するのかプロセスに関与しようとしています。 そのため、コマンドがシェルから起動されると、そのコマンドのfork()子プロセスを継承し、子プロセスをexec()メモリにロードして実行します。 子プロセスに親プロセス(元のプロセス)のすべての属性が含まれている場合、この子プロセスの必要性は何ですか?元のプロセスもメモリにロードされている可能性があります。 これforkとexec概念は、UNIXのすべての実行可能プログラムに適用されますか?シェルスクリプトも、コマンドだけが好きですか?シェルの組み込みコマンドにも適用されますか? コマンド/スクリプトを実行する場合、コピーオンライトの概念はいつ使用されますか? 一度に多くの質問をしてすみませんが、コマンドの実行について考えると、これらすべての質問が一度に思い浮かびます。
17 fork  exec 

1
これらのbash fork爆弾の動作が異なるのはなぜですか。
通常のフォーク爆弾がどのように機能するかはわかりますが、一般的なbashフォーク爆弾の最後に&が必要な理由と、これらのスクリプトの動作が異なる理由はよくわかりません。 :(){ (:) | (:) }; : そして :(){ : | :& }; : 前者は、ログイン画面に戻る前にCPU使用率の急上昇を引き起こします。後者は代わりにシステムをフリーズさせ、ハードリブートを強制します。何故ですか?どちらも継続的に新しいプロセスを作成しますが、なぜシステムの動作が異なるのですか? また、両方のスクリプトは、 :(){ : | : }; : 似ていると思っていたとしても、問題はまったく発生しません。bashのマニュアルページには、パイプラインのコマンドはすでにサブシェルで実行されていると記載されているため、次のように信じられます。:すでに十分です。私は信じており、新しいサブシェルでパイプラインを実行する必要がありますが、なぜそんなに変わるのですか? 編集:htopを使用してプロセスの量を制限すると、最初のバリアントはプロセスの実際のツリーを作成し、2番目のバリアントは同じレベルのすべてのプロセスを作成し、最後のバリアントはプロセスを作成しないように見えましたまったく。これは私をさらに混乱させますが、おそらくそれが何らかの形で役立つのでしょうか?

3
なぜfork()はファイル記述子を返すように設計されているのですか?
彼の上に関するウェブページの自己パイプのトリック、ダン・バーンスタインはと競合状態を説明select()し、信号、回避策を提供していますし、その結論を もちろん、正しいことはfork()プロセスIDではなくファイル記述子を返すことです。 彼はこれによって何を意味しselect()ますか?シグナルハンドラを使用してそれらの状態変化を通知する代わりに、子プロセスで状態変化を処理することができるということですか?

1
典型的なシェル「fork bomb」は、どのくらい正確に自分自身を2回呼び出しますか?
Askubuntuや他の多くのStack Exchangeサイトで有名なFork Bombの質問を読んだ後、誰もが言っていることは明らかだとはわかりません。 多くの答え(最良の例)はこう言います: 「{:|: &}関数:を実行し、その出力を:再度関数に送信することを意味します」 さて、出力は正確に何:ですか?他に何が渡されてい:ますか? そしてまた: 基本的には、呼び出しごとに自分自身を2回呼び出す関数を作成し、自分自身を終了する方法はありません。 それはどのくらい正確に2回実行されますか?私の意見では:、最初のもの:が実行を終了するまで何も渡されず、実際には終了しません。 ではC例えば、 foo() { foo(); foo(); // never executed } foo()最初のものfoo()が終了しないという理由だけで、2番目のものはまったく実行されません。 同じ論理が当てはまると思います :(){ :|: & };:、 :(){ : & };: と同じ仕事をする :(){ :|: & };: ロジックを理解してください。


2
ファイル記述子とフォーク
子がフォークされた場合、子は親のファイル記述子を継承します。子がファイル記述子を閉じるとどうなりますか?子供が書き込みを開始した場合、親の最後でファイルはどうなりますか?これらの不整合を管理するのは誰ですか、カーネルまたはユーザーですか? プロセスがcloseファイル記述子を介して特定の開いているファイルを閉じる関数を呼び出すとき。プロセスのファイルテーブルでは、参照カウントが1つ減少します。しかし、親と子の両方が同じファイルを保持しているため、参照カウントは2になり、クローズ後は1に減少します。ゼロではないので、プロセスは引き続き問題なくファイルを使用し続けます。 Terrence Chan UNIXシステムプログラミング(ファイルのUNIXカーネルサポート)を参照してください。


5
リダイレクトを使用しているシェルコマンドを完全にフォークする方法
私は長年にわたってかなりの数のシェルスクリプトを書いている(しかし、私は確かにシステム管理者ではないよ)といつも私を引き起こしたことがあるの何かトラブル:どのように私はからバックグラウンドでハングアップするシェルコマンド免疫をforkできるのBashスクリプト? たとえば、これがある場合: command_which_takes_time input > output これを「nohup」してフォークするにはどうすればよいですか? 以下は私が望むことをしていないようです: nohup command_which_takes_time input > output & 私が探している構文は何ですか?理解していないものは何ですか?
13 bash  scripting  nohup  fork 

2
fork()とvfork()の違いは何ですか?
fork()とvfork()の違いを詳細に理解したいと思います。マニュアルページを完全に消化できませんでした。 また、同僚のコメントの1つを明確にしたいと思います。「現在のLinuxにはvfork()はありません。たとえそれを呼び出しても、内部的にfork()を呼び出します。」

1
ksh93はコマンド置換でフォークをどのように回避しますか
与えられた cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))' シェルはそれを実現するために2つのフォークを作る必要がある傾向があります strace-f(){ strace -f "$@" 2>&1; }; for sh in dash bash zsh ksh; do printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c; done ksh一度もフォークせずに英雄的に作成する場合を除きます: dash 2 bash 2 zsh 2 ksh 0 それはどうやって? 編集: パイプがスローされると、次のようになります。 …

3
プロセスが分岐するとき、その仮想メモリまたは常駐メモリはコピーされますか?
Linuxで新しいプロセスを作成する標準的な方法は、親プロセスのメモリフットプリントがコピーされ、それexecvが呼び出されるまで子プロセスの環境になることです。 仮想メモリ(プロセスが要求したもの)または常駐メモリ(実際に使用されているもの)について、どのメモリフットプリントについて話していますか? 動機:スワップスペースが限られたデバイスと、仮想メモリフットプリントと常駐メモリフットプリントに大きな違いがあるアプリケーションがあります。メモリ不足のため、アプリケーションは分岐できません。仮想フットプリントのサイズを小さくすることが役立つかどうかを確認したいと考えています。

4
vforkまたはforkの子がexit()ではなく_exit()を呼び出す必要があるのはなぜですか?
のマニュアルページからvfork(): vfork()は、子がexecve(2)または_exit(2)を呼び出すまで親が一時停止されるという点でfork()とは異なります。子は、execve()が子によって発行されるまで、スタックを含むすべてのメモリを親と共有します。子は現在の関数から戻ったり、exit()を呼び出したりしてはなりませんが、_exit()を呼び出すことはできます。 なぜ子供が使用する必要があり_exit()、単純に呼び出すのではなくexit()?私は、これは両方に適用され願っていますvfork()とfork()。
12 c  system-calls  fork  exit 

4
いつfork()とexec()を呼び出すのですか?
私はfork()およびexec()コマンドについて学習しています。fork()とexec()は通常一緒に呼び出されるようです。(fork()は新しい子プロセスを作成し、exec()は現在のプロセスイメージを新しいプロセスに置き換えます。)ただし、どの関数を使用して各関数を独自に呼び出すのでしょうか。このようなシナリオはありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.