Количество количества процессов с PS - AF

Вот сценарий Python, который выполняет поиск подстроки на внешнем файле. Сценарий был первоначально записан Kamran Khan и размещен в его блоге. Я очень немного адаптировал его для взятия строки поиска из файла и поиска в стандартном входе.

#!/usr/bin/env python
import locale
import os
import sys
import urllib2

def boyermoore_horspool(fd, needle):
    nlen = len(needle)
    nlast = nlen - 1

    skip = []
    for k in range(256):
        skip.append(nlen)
    for k in range(nlast):
        skip[ord(needle[k])] = nlast - k
    skip = tuple(skip)

    pos = 0
    consumed = 0
    haystack = bytes()
    while True:
        more = nlen - (consumed - pos)
        morebytes = fd.read(more)
        haystack = haystack[more:] + morebytes

        if len(morebytes) < more:
            return -1
        consumed = consumed + more

        i = nlast
        while i >= 0 and haystack[i] == needle[i]:
            i = i - 1
        if i == -1:
            return pos

        pos = pos + skip[ord(haystack[nlast])]

    return -1

if __name__ == "__main__":
    if len(sys.argv) < 2:
        sys.stderr.write("""Usage: horspool.py NEEDLE_FILE [URL]
Search for the contents of NEEDLE_FILE inside the content at URL.
If URL is omitted, search standard input.
If the content is found, print the offset of the first occurrence and return 0.
Otherwise, return 1.""")
        sys.exit(2)
    needle_file = open(sys.argv[1])
    needle = needle_file.read()
    needle_file.close
    fd = urllib2.urlopen(sys.argv[2]) if len(sys.argv) > 2 else sys.stdin
    offset = boyermoore_horspool(fd, needle)
    if offset >= 0: print offset
    else: sys.exit(1)
    fd.close()

2
08.05.2013, 12:23
4 ответа

ps -Af не лучший подход.

f опция является лишней и могла бы инициировать ложь, положительную, если не emacs процессы используют emacs или строку, содержащую его, как один из их параметра, не говоря уже о (маловероятном) случае пользователя назвал emacs.

Я предложил бы использовать эту более простую команду:

pgrep emacs | wc -l
5
27.01.2020, 21:50

можно сделать ps -C emacs --no-heading | wc -l

ps -C command вывод обрабатывает названием команды

Править: ps --help очень интересно

3
27.01.2020, 21:50
  • 1
    Ваш ответ является изящным способом решить проблему, за исключением того, что OP указал, что он должен был использовать ps -Af, нет ps -C. (Принимающий это действительно домашняя работа. То, что hw вопрос указал - AF и что предыдущий вопрос о домашней работе был о grep. Все из которых являются предположениями с моей стороны). –  Hennes 08.05.2013, 13:36

Поскольку Hennes сказал, что можно использовать"ps -AF | grep emacs | wc -l"чтобы сделать это. Но у Вас будет собственная команда там также. Для избавлений от этой команды (команд), Вы можете нас"grep -v"(или --inverted-match) для отфильтровывания команд, Вы не хотите рассчитывать. Таким образом, было бы похоже что: ps -AF | grep emacs | grep -v grep | wc -l

2
27.01.2020, 21:50

Запустите с первых принципов.

Начните путем установления того, что точно команда Вас попросили использовать, делает, и как указанные опции (-Af) работа. Сделать это чтение man ps:

-A Select all processes.
-f Do full-format listing. This option can be combined with many other UNIX-style options to add additional columns.

Таким образом, Ваша начальная точка является выводом всех процессов, работающих за Вашим пользователем, перечисленным в полном формате. Выполните команду для наблюдения полного вывода прежде, чем попытаться сделать любую обработку:

ps -Af

Для подсчета emacs процессы, необходимо будет затем передать вывод по каналу через fitering инструмент, чтобы обработать вывод и/или считать соответствующие соответствия. grep хороший вариант, но для эффективности и простоты, я использовал бы awk:

ps -Af | awk '/emacs/ && !/awk/ { a++ } END { print a }'

Это ищет шаблон /emacs/, исключает шаблон самого поиска, !/awk/, увеличивает соответствия { a++ } и затем печатает общее количество { print a }.

Это только требует единственного канала и изящно занимается проблемой не возврата поискового процесса в Вашем количестве.

0
27.01.2020, 21:50

Теги

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