Что означает каждый процесс имеет текущий каталог?

awk -F\; 'length($3) == 30' file.csv

Если у Вас может быть пробел (как это появляется), можно избавиться от него путем создания его частью разделителя полей:

awk -F' *; *' 'length($3)==30' file.csv
10
01.05.2013, 02:08
2 ответа

Концептуальный уровень

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

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

Вы видите, что ток работает каталоги всех процессов, работающих на Вашей системе с lsof | grep '\scwd\s' (обратите внимание, что необходимо будет, вероятно, быть корнем для наблюдения процессов других пользователей.) Это может дать Вам общее представление о том, как текущие рабочие каталоги касаются процессов, работающих на Вашей системе.

Уровень программы

Текущий рабочий каталог оболочки является каталогом, который Вы видите и изменяете с созданной-ins оболочкой pwd и cd соответственно. Эти команды называют системные вызовы таким как getcwd и chdir та работа с текущим рабочим каталогом Вашей оболочки.

Используя bash как пример, cd встроенный в конечном счете выполняет эту строку:

if (chdir (nolinks ? newdir : tdir) == 0)

и pwd встроенный в конечном счете выполняет эту строку:

the_current_working_directory = getcwd (0, PATH_MAX);

Оболочка является просто удобным примером использования текущего рабочего каталога; эти те же системные вызовы используются другими программами также. Программа может изменить свой текущий рабочий каталог на /usr и любые относительные пути, которые использование программы запустит с /usr каталог,

Уровень ядра

Текущий рабочий каталог процесса хранится ядром. Linux хранит его в pwd член a fs_struct указанный fs член a task_struct. pwd участник является a path структура, которая указывает на информацию о монтировании (vfsmount) и местоположение каталога в файловой системе (dentry). Каждый процесс имеет a task_struct связанный с ним.

chdir и getcwd системные вызовы изменяют и получают информацию в pwd.

13
27.01.2020, 20:01
  • 1
    Кроме того, для уровня ядра полезно помнить, что, когда системный вызов сделан, существует указатель на 'ток', task_struct доступен - таким образом, код выполнен 'от имени' текущего процесса. к fs_struct можно получить доступ через указатель на текущий task_struct: elixir.free-electrons.com/linux/v4.12.4/source/fs / … –  Dmitrii S. 05.08.2017, 20:52

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

Выполненный PS aux для обнаружения PID процесса:

$ pgrep cupsd
24532

Узнать текущий рабочий каталог PID: 24532

$ sudo pwdx 24532
24532: /

Так процесс (PID: 24532), имеет CWD /.

Вот другой пример:

$ sleep 1000 &
[1] 15988

$ pwdx 15988
15988: /home/sam

На этот раз спящий процесс (PID: 15988), имеет, это - набор CWD к моему корневому каталогу, /home/sam.

Можно также работать ls -l команда:

$ sudo ls -l /proc/24532/cwd
lrwxrwxrwx 1 root root 0 Apr 30 19:18 /proc/24532/cwd -> /

- или -

$ ls -l /proc/15988/cwd
lrwxrwxrwx 1 sam sam 0 Apr 30 19:23 /proc/15988/cwd -> /home/sam

Здесь можно снова видеть CWD для тех процессов, / и /home/sam.

Ссылки

1
27.01.2020, 20:01

Теги

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