GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit proces ve vlastní skupině procesů?

Co tím myslíte "spustit proces ve vlastní skupině procesů"? Shell spouští procesy v jejich vlastních skupinách procesů, tak to řídí úlohy (tím, že má skupinu procesů pro procesy v popředí a několik skupin procesů pro každý kanál spuštěný na pozadí).

Chcete-li vidět, že shell spouští novou skupinu procesů pro každý kanál, můžete to udělat takto:

ps fax -o pid,pgid,cmd | less

což ukáže něco jako:

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

Všimněte si, že shell vytvořil novou skupinu procesů pro kanál a každý proces v kanálu sdílí skupinu procesů.

Upravit:

Myslím, že vím, na co narážíš. Voláte system z Perlu. Zřejmě sh -c nevytváří nové skupiny procesů, protože je to shell bez řízení úloh.

Co bych udělal, by bylo fork , pak na dítě:

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

a wait na rodiči.


EDIT:Pokud jste chtěli použít setsid, ale najít ID relace a/nebo pid výsledného procesu:

Pokud spustíte proces pomocí příkazu setsid, nebude připojen k vašemu terminálu, takže samozřejmě nebude reagovat na ctrl-c.

Můžete to najít procházením výstupu

ps x -O sid 

nebo něco omezenějšího jako

ps x -o %c,%p,sid

Nebo jednoduchým trollingem přes proc/[pid]/stat pro všechny položky a prohlížením ID relace a čehokoli dalšího, co vás zajímá (podrobnosti viz man proc)

Manuálová stránka pro setsid neposkytuje žádné příznaky pro přímé generování výstupu, ale můžete si triviálně vytvořit svou vlastní verzi, která vytiskne požadované informace, úpravou standardu.

Například vezměte kopii setsid.c z jednoho z výsledků pro

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

Zakomentujte nls include, locale a makro chyby _(""), které způsobí problémy, a poté přidejte toto přímo před řádek execvp:

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

Linux
  1. Jak proces na pozadí poznat svůj vlastní PID?

  2. Jak zjistit čas zahájení dlouhotrvajícího linuxového procesu?

  3. Jak zajistím, aby můj webový server Golang běžel na pozadí?

  1. Jak zabít proces zombie na Linuxu

  2. Jak se PulseAudio spouští?

  3. Linux – Jak zjistím, kdy byl proces spuštěn?

  1. Jak spustit příkaz Linux na pozadí a odpojit proces v terminálu

  2. Jak nainstalovat vtop na Linux

  3. Jak zabít proces s frází v jeho názvu?