GNU/Linux >> Linux の 問題 >  >> Linux

独自のプロセスグループでプロセスを開始する方法は?

「独自のプロセスグループでプロセスを開始する」とはどういう意味ですか?シェルは、独自のプロセス グループでプロセスを起動します。これが、ジョブ制御を行う方法です (フォアグラウンドでプロセスのプロセス グループを作成し、バックグラウンドで起動されるすべてのパイプラインに対して複数のプロセス グループを作成することにより)。

シェルがパイプラインごとに新しいプロセス グループを起動することを確認するには、次のようにします。

ps fax -o pid,pgid,cmd | less

次のように表示されます:

11816 11816  |   \_ /bin/bash
4759   4759  |       \_ ps fax -o pid,pgid,cmd
4760   4759  |       \_ less

シェルがパイプライン用の新しいプロセス グループを作成し、パイプライン内のすべてのプロセスがプロセス グループを共有していることに注意してください。

編集:

私はあなたが何を得ているか知っていると思います。 system を呼び出しています パールから。どうやら、sh -c ジョブ制御のないシェルであるため、新しいプロセス グループを作成しません。

私なら fork にします 、次に子で:

setpgrp;
system("ps fax -o pid,pgid,cmd");

wait


編集:setid を使用したいが、結果のプロセスのセッション ID および/または pid を見つけたい場合:

setsid コマンドを使用してプロセスを起動すると、端末にアタッチされないため、もちろん ctrl-c には応答しません。

の出力を grep することで見つけることができます
ps x -O sid 

またはもっと限定的なもの

ps x -o %c,%p,sid

または、すべてのエントリの proc/[pid]/stat を単純にトローリングし、セッション ID とその他の関心のあるものを調べます (詳細については、man proc を参照してください)。

setsid の man ページには、出力を直接生成するためのフラグはありませんが、標準を変更することで、目的の情報を出力する独自のバージョンを簡単に作成できます。

たとえば、

の結果の 1 つから setsid.c のコピーを取得します。

http://www.google.com/codesearch?as_q=setsid&as_package=util-linux

nls インクルード、ロケール関連、および問題を引き起こす _("") エラー マクロをコメント アウトし、execvp 行の直前にこれを追加します。

    printf("process will be pid %d sid %d\n", getpid(), getsid(0));

Linux
  1. Linuxでゾンビプロセスを強制終了する方法

  2. PulseAudio はどのように起動しますか?

  3. Linux - プロセスがいつ開始されたかを確認するにはどうすればよいですか?

  1. Linuxコマンドをバックグラウンドで起動し、ターミナルでプロセスをデタッチする方法

  2. Linuxにvtopをインストールする方法

  3. バックグラウンドプロセスが独自のPidを知る方法は?

  1. 長時間実行されている Linux プロセスの開始時刻を取得するには?

  2. psを印刷グループにするにはどうすればよいですか?

  3. 複数のフォルダをそれぞれ独自の zip アーカイブに圧縮する方法は?