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

24
親が終了した後に子プロセスを停止させる方法は?
ちょうど1つの子プロセスを生成するプロセスがあるとします。親プロセスが何らかの理由(通常または異常、kill、^ C、assert failureなど)で終了した場合、子プロセスを終了させます。それを正しく行う方法は? Stackoverflowに関するいくつかの同様の質問: (前に質問)親プロセスが終了したときに、子プロセスを終了させるにはどうすればよいですか? (後で尋ねます)fork()で作成された子プロセスは、親が強制終了されたときに自動的に強制終了されますか? Windowsの stackoverflowに関する同様の質問: Windowsで子プロセスを自動的に破棄するにはどうすればよいですか? 親プロセスが強制終了されたときに子プロセスを強制終了します
209 c  linux  unix  process  fork 


5
fork()、vfork()、exec()およびclone()の違い
私はGoogleでこれら4つの違いを見つけようとしていたので、これについては膨大な量の情報があると予想していましたが、4つの呼び出しの間に明確な比較はありませんでした。 私は、これらのシステムコールの違いを一目で確認できるような種類のコンパイルを試みることに着手しました。これが私が得たものです。この情報はすべて正しいですか/重要な情報が欠けていますか? Fork :fork呼び出しは基本的に現在のプロセスの複製を作成し、ほぼすべての点で同一です(たとえば、一部の実装ではリソースの制限がすべてコピーされるわけではありませんが、できるだけ近いコピーを作成するという考えです)。 新しいプロセス(子)は別のプロセスID(PID)を取得し、古いプロセス(親)のPIDをその親PID(PPID)として持ちます。2つのプロセスがまったく同じコードを実行しているので、フォークの戻りコードによってどちらがどちらであるかがわかります。子は0を取得し、親は子のPIDを取得します。もちろん、これはすべてfork呼び出しが機能することを前提としています。機能しない場合、子は作成されず、親はエラーコードを受け取ります。 Vfork:vforkとforkの基本的な違いは、vfork()で新しいプロセスが作成されると、親プロセスが一時的に中断され、子プロセスが親のアドレス空間を借用する可能性があることです。この奇妙な状況は、子プロセスが終了するか、execve()を呼び出すまで続き、その時点で親プロセスは続行します。 つまり、vfork()の子プロセスは、親プロセスの変数を予期せず変更しないように注意する必要があります。特に、子プロセスはvfork()呼び出しを含む関数から戻ってはならず、exit()を呼び出してはなりません(終了する必要がある場合は、_exit()を使用する必要があります);実際、これは子にも当てはまります。通常のfork()の場合)。 Exec :exec呼び出しは、基本的に現在のプロセス全体を新しいプログラムに置き換える方法です。プログラムを現在のプロセス空間にロードし、エントリポイントから実行します。exec()は、現在のプロセスを、関数が指す実行可能ファイルで置き換えます。exec()エラーがない限り、制御が元のプログラムに戻ることはありません。 Clone :クローンは、フォークとして、新しいプロセスを作成します。forkとは異なり、これらの呼び出しにより、子プロセスは、メモリスペース、ファイル記述子のテーブル、シグナルハンドラーのテーブルなど、その実行コンテキストの一部を呼び出しプロセスと共有できます。 子プロセスがcloneで作成されると、関数アプリケーションfn(arg)が実行されます。(これは、元のfork呼び出しのポイントから子で実行が継続されるforkとは異なります。)fn引数は、実行の開始時に子プロセスによって呼び出される関数へのポインターです。arg引数はfn関数に渡されます。 fn(arg)関数アプリケーションが戻ると、子プロセスは終了します。fnによって返される整数は、子プロセスの終了コードです。子プロセスは、exit(2)を呼び出すことによって、または致命的なシグナルを受信した後で、明示的に終了することもできます。 取得した情報: forkとexecの違い http://www.allinterview.com/showanswers/59616.html http://www.unixguide.net/unix/programming/1.1.2.shtml http://linux.about.com/library/cmd/blcmdl2_clone.htm これを読むために時間を割いてくれてありがとう!:)
197 linux  process  fork  exec  clone 

3
fork()は予想以上に分岐しますか?
次のコードを考えてみましょう。 #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i = 0; i < 2; i++) { fork(); printf("."); } return 0; } このプログラムは、8つのドットを出力します。それはどのようにして可能ですか?代わりに6つのドットがあるべきではありませんか?
186 c++  c  fork 

4
GitHubにパブリックリポジトリのプライベートブランチがありますか?
GitHubリポジトリにパブリックPHPプロジェクトがあり、ブランチ(マスター)が1つだけ含まれています。 プライベートな別のブランチ/フォークを用意したい(プライベートGitHubリポジトリに支払い済み)。プライベートブランチ/フォークからパブリックリポジトリへの変更、およびその逆の変更をマージできるようにしたいと思います。 それを念頭に置いて、ここに私の質問があります: パブリックリポジトリにプライベートブランチを作成できますか? 自分のパブリックリポジトリを自分のプライベートブランチ/フォークにフォークできますか? 上記の両方が可能である場合、どちらが最善の方法ですか?どちらでもない場合、どうすればよいですか?
126 github  git-branch  fork 


5
Linux in Cで共有メモリを使用する方法
私のプロジェクトの1つに少し問題があります。 私は共有メモリを使用してよく文書化された例を見つけようとしましfork()たが、成功しませんでした。 :基本的なシナリオは、ユーザーがプログラムを起動したときに、私は、共有メモリ内の2つの値格納する必要があるということですCURRENT_PATHでのchar *とfile_nameにもあるのchar *を。 コマンド引数に応じて、新しいプロセスが開始され、file_name変数は読み取り専用であるがfork()、そのプロセスは共有メモリに格納されているcurrent_path変数を読み取り、変更する必要があります。 あなたが私に指示することができるサンプルコード(可能な場合)を含む共有メモリに関する良いチュートリアルはありますか?
117 c  linux  fork  shared-memory 

5
フォークせずにプルリクエスト?
「GitHubで他の人のコードに貢献するにはどうすればよいですか?」というトピックからのコード貢献の手順を次に示します。 プロジェクトをフォークする よくコメントされた1つ以上のリポジトリにコミットをクリーンアップします。複数のパーツまたはフィーチャーを変更する場合は、ここで新しいブランチを作成できます。 githubのウェブインターフェースでプルリクエストを実行します。 レポをフォークせずにプルリクエストを行うことはできますか? いくつかのプルリクエストのためにフォークされた私のアカウントに20を超えるリポジトリが表示されるのは非常に悲しいことです。彼らはその時活動がなく、星/フォロワーはゼロです。誰かのコードをコピーして、ブラックデーをやっているようです。
105 git  github  fork  repository 


15
fork()の目的は何ですか?
Linuxの多くのプログラムやマニュアルページで、を使用しfork()たコードを見てきました。なぜ使用する必要fork()があり、その目的は何ですか?
87 c  unix  posix  fork 

2
フォーク:再試行:リソースが一時的に利用できません[クローズ]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、話題のスタックオーバーフローのため。 8年前に閉鎖されました。 この質問を改善する コンピューターにIntelMPIベンチマークをインストールしようとしましたが、次のエラーが発生しました。 fork: retry: Resource temporarily unavailable その後、実行lsしてtopコマンドを実行すると、このエラーが再び発生しました。 このエラーの原因は何ですか? 私のマシンの構成: Dell precision T7500 Scientific Linux release 6.2 (Carbon)
80 linux  fork  mpi  intel 

4
forkを呼び出すときにスレッドはコピーされますか?
スレッドで実行しているプログラムがありfork()、UNIXベースのシステムを呼び出す場合、スレッドはコピーされますか?現在のプロセスの仮想メモリが、生成された新しいプロセスに1:1でコピーされることを知っています。スレッドがプロセスの仮想メモリに独自のスタックを持っていることを知っています。したがって、少なくともスレッドのスタックもコピーする必要があります。ただし、仮想メモリに存在しないためにコピーされないスレッドが他にあるかどうかはわかりません。ない場合、2つのプロセスはスレッドを共有していますか、それとも独立したコピーですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.