Выполните процесс к конкретному/посвященному pid только

Используя -print0 одна опция, но не вся поддержка программ с помощью nullbyte-разграниченных потоков данных, таким образом, необходимо будет использовать xargs с -0 опция для некоторых вещей, как ответ Gnouc отметил.

Альтернатива должна была бы использовать find -exec или -execdir опции. Первое из следующего подаст имена файлов к somecommand по одному, в то время как второе расширится до списка файлов:

find . -type f -exec somecommand '{}' \;
find . -type f -exec somecommand '{}' +

Можно найти, что Вы - более обеспеченное использование globbing во многих случаях. Если у Вас есть современная оболочка (колотите 4 +, zsh, ksh), можно получить рекурсивный globbing с globstar (**). В ударе необходимо установить это:

shopt -s globstar
somecommand ./**/*.txt ## feeds all *.txt files to somecommand, recursively

У меня есть высказывание строки shopt -s globstar extglob в моем .bashrc, таким образом, это всегда включается для меня (и так расширенные шарики, которые также полезны).

Если Вы не хотите рекурсивности, очевидно, просто используйте ./*.txt вместо этого, для использования каждого *.txt в рабочем каталоге. find имеет некоторые очень полезные мелкомодульные возможности поиска и обязателен для десятков тысяч файлов (в которой точке Вы столкнетесь с максимальным количеством оболочки аргументов), но для ежедневного использования это является часто ненужным.

5
23.05.2014, 14:19
5 ответов
[1175310] Я не думаю, что вы можете резервировать или назначать PID. Тем не менее, вы можете начать свой процесс в таком скрипте, как этот:

Это создает "pid-файл", как на него ссылались некоторые другие люди. Вы можете затем получить его на bash, например, с помощью [1175694]$(

Просто остерегайтесь, что если процесс умер и pid был переработан, то вы будете сигнализировать о неправильном. Вы можете проверить:

Смотрите комментарии, если [1175698]"$(ps -o comm=p "$pid")"[1175699] выглядит для вас странно. Возможно, вы захотите провести более тщательную проверку, если есть вероятность, что кто-то делает что-то хитрое с содержимым [1175700]/tmp/myprocess.pid[1175701] (которое не должно быть записано другими пользователями!).[1175317].
9
27.01.2020, 20:31
[1176265]Исправление pid - это, безусловно, неправильное решение Вашей проблемы, но обратите внимание, что в некоторых версиях Linux, Вы можете получить больше шансов получить желаемый pid, написав значение в [1176743]/proc/sys/kernel/ns_last_pid[1176744]: [12136]Это работает только в том случае, если pid 10000 еще не используется (и между записью в ns_last_pid и порождением процесса/потока не было создано ни pid, ни thread). [12137] Иначе, Вы всегда можете вилкировать до тех пор, пока не получите понравившийся Вам пид.[1176270].
6
27.01.2020, 20:31
[1175318] Нечто похожее на то, что вы хотите сделать, обычно делается процессом на ранней стадии своего жизненного цикла, выписывающим свой собственный pid (который можно получить через [1175702]getpid(2)[1175703]) в файл с известным именем. В обычных демонах имя этого файла часто настраивается, но в специальном программном обеспечении вы, вероятно, сможете ужиться с его жестким кодированием. (Тем не менее, я настоятельно рекомендую, по крайней мере, использовать для этого макрос.)

PID-файлы обычно размещаются в /var/run или /run, но могут быть размещены и в других местах, включая /tmp. Надлежащее" расположение согласно стандарту Filesystem Hierarchy Standard находится в /run, но в /var/run также видно значительное использование (и на многих современных системах это то же самое, что и в /run) и /tmp не требуют привилегий root при запуске (которые системные демоны очень часто имеют перед тем, как сбрасывать привилегии)

Этот файл можно прочитать различными способами, чтобы получить PID рассматриваемого процесса, для того, чтобы послать сигнал этому процессу.[1175323].

3
27.01.2020, 20:31
[1176295]Вы не можете установить PID, но вы можете [1176774]установить PGID: создать или присоединиться к группе процессов [1176946][12152]. Тогда вы можете посылать сигналы в эту выделенную группу процессов.[12153] У меня сложилось впечатление, что новая система init [1176776] systemd[1176777] имеет некоторую автоматизацию на этой части, что превосходит то, что процесс записывает свой PID в PID-файл, а затем использует его для управления.[12154]systemd[1176779] перед запуском управляемого процесса переключается на "группу процессов" (как я это понимаю), и тогда все находится в этой группе. Таким образом, вы можете управлять всеми дочерними процессами, запомнив специальную "группу".[12155]Если она работает подобным образом, то это лучше, чем иметь процесс для записи своего PID, потому что вам не нужно изменять программу.[12156]Это также может быть лучше, чем:[12157]myprocess & эхо $! > /tmp/myprocess.pid[12158]потому что этот подход захватывает и всех детей этого процесса.[12159]У меня под рукой нет подробной документации в поддержку моих слов, но [1176784]здесь[1176785] это общее представление о том, что [1176786]systemd[1176787] нужно от cgroups,и это, кажется, совпадает с моим впечатлением:[12160]Control Groups - это две вещи: [1176954](A) способ иерархической группировки и процессы этикетирования[1176955], и (B) способ затем применить ограничения на ресурсы к ним. системаd требует только первого (A), а не второго (B). Это означает, что вы можете скомпилировать ядро без какой-либо контрольной группы. Контроллеры ресурсов (B) и systemd будут отлично работать на нем. Однако, [1176956], если вы дополнительно отключите функцию группировки полностью (A) тогда systemd будет громко жаловаться[1176957] при загрузке и действовать только неохотно. с большим предупреждением и в режиме ограниченной функциональности.[12161]
1
27.01.2020, 20:31
[1175306] Демон системного уровня назначается согласно последовательности запуска во время загрузки. Я считаю, что назначение фиксированного pid для конкретного процесса невозможно, так как он назначается ядром в соответствии с загрузкой системы и другими зависимостями.

Но используя системный вызов, мы можем назначить процессу фиксированный PID. Но мы не знаем, как этого достичь. [1175309]

-1
27.01.2020, 20:31

Теги

Похожие вопросы