Как я могу составить список PID всех процессов, запущенных в каталоге?

Я не думаю, что можно обойтись без URL-кодирования. wget src / url.c удаляет их; насколько я могу судить из очень беглого взгляда на источник, выхода нет.

/* Resolve "." and ".." elements of PATH by destructively modifying
   PATH and return true if PATH has been modified, false otherwise.

   The algorithm is in spirit similar to the one described in rfc1808,
   although implemented differently, in one pass.  To recap, path
   elements containing only "." are removed, and ".." is taken to mean
   "back up one element".  Single leading and trailing slashes are
   preserved.

   For example, "a/b/c/./../d/.." will yield "a/b/".  More exhaustive
   test examples are provided below.  If you change anything in this
   function, run test_path_simplify to make sure you haven't broken a
   test case.  */
-1
24.02.2018, 08:03
2 ответа

Usefuser -m /path/to/folder 2>/dev/null(descarta stderrde la salida )o examine los casos de uso disponibles conman fuser

1
28.01.2020, 05:06

Tenga en cuenta que su comando no enumera los procesos que se ejecutan en un directorio. Enumera los procesos cuyos archivos de imagen de programa fueron encontrados(por el shell )en ese directorio y, por lo tanto, enumerados como tales en su argumento de comando 0 (o que tienen ese directorio mencionado en su otro comando argumentos ). Esos procesos, por supuesto, no necesariamente se ejecutan en ese directorio. Asumiré que desea lo que solicitó (dado que dijo ejecutándose en un directorio tres veces ), no lo que realmente hizo su comando.

Ya que no ha especificado un sistema operativo:

FreeBSD/TrueOS y OpenBSD

Use la opción -fa fstatpara filtrar por sistema de archivos, use el comando statpara obtener el número de inodo del directorio deseado (nombrado en la variable de shell ${directory}según corresponda de antemano ), y use awkpara usar este último como un filtro en las entradas wdgeneradas porfstat:

fstat -f "${directory}" | 
awk '{
    if ($4 == "wd" && $6 == '"`stat -f %i \"${directory}\"`"' && !x[$3]++)
        print $3;
}'
Ejecute (solo)fstatcomo superusuario para incluir los procesos de otros usuarios.

Linux

Dos enfoques:

  • Use la opción -da lsofpara que seleccione solo entradas cwd, use el comando staty algún dcprocesamiento posterior -para obtener el número de inodo y el dispositivo montado mayor/menor números del directorio deseado (nombrados en la variable de shell ${directory}según corresponda de antemano ),y use awkpara usar el último dos como un filtro en la salida delsof:
    lsof -d cwd | 
    awk '{
        if ($8 == '"`stat --format %i \"${directory}\"`"' \
        &&  $6 == "'"`dc -e \"16doi \`stat --format %D \"${directory}\"\` 100~ r n[,]Pn\"`"'" \
        &&  !x[$2]++)
            print $2;
    }'
    Ejecute (solo)lsofcomo superusuario para incluir los procesos de otros usuarios.
  • Use fusercomo en otra respuesta.
4
28.01.2020, 05:06

Теги

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