Ну, это зависит от определения. В разных системах могут быть разные обычаи или разные названия одной и той же вещи.
Определение POSIX заключается в том, что процесс идентифицируется адресным пространством (памяти, видимой для процесса ), и что многие/большинство ресурсов ОС принадлежат процессу. (идентификатор процесса (очевидно ), идентификаторы пользователей, рабочий каталог, файловые дескрипторы...)
С другой стороны, поток определяется как «поток управления» внутри процесса, включая среду выполнения (регистры ЦП, состояние с плавающей запятой ), и например приоритет планирования.
Обычно :процесс ресурсы, поток планирование.
Но это не обязательно должно быть именно так. В Linux ресурсы, совместно используемые процессом и его дочерними процессами, могут быть установлены с помощью системного вызоваclone(2)
, так что, по крайней мере, представляется возможным иметь два процесса с общими файловыми дескрипторами, но с разными адресными пространствами. Или наоборот.
Кроме того, в прежние времена в Linux фактически не было надлежащего различия между процессами и потоками, были только процессы на уровне ядра. (Технически то, что мы обычно рассматриваем как поток, по-прежнему называется ядром «процессом», а процесс в обычном смысле называется «группой процессов».)
Некоторые потоки могут быть реализованы исключительно в пользовательском пространстве без поддержки со стороны операционной системы. В этом случае потоки не будут планироваться той же системой, что и процессы, поскольку планировщик ОС даже не будет знать об их существовании. Но даже в этом случае реализация пользовательского пространства должна иметь какой-то способ определить, какой поток запускать. (Реализации пользовательского -пространственного потока устарели в системах, которые реализуют правильные потоки, но это единственная ситуация, которую я могу придумать, которая даже близка к вашему третьему пункту.)
Вы можете добавить инверсию grep
с помощью -v
после первогоgrep
:
$ grep -B1 --no-group-separator 'MARK' somefile | grep -v 'MARK'
interesting value
interesting value
Я добавил --no-group-separator
, чтобы опустить разделительные строки между совпадениями.
Если вы не привязаны к использованию grep
, то можете использовать другие инструменты, например awk.
awk '/MARK/ { print saved_line }
{ saved_line=$0 }'
в котором говорится, что нужно печатать сохраненную строку, если она совпадает, и в каждой строке сохранять ее на случай, если она понадобится снова.