Bash команда, которая итератует через папку и запускает python script

Команда kill - это очень простая оболочка для системного вызова kill , который знает только об идентификаторах процесса (PID). pkill и killall также являются оболочками для системного вызова kill (фактически, библиотеки libc, которая непосредственно вызывает системный вызов), но может определить PID для вас на основе таких вещей, как имя процесса, владелец процесса, идентификатор сеанса и т. д.

Как работают pkill и killall , можно увидеть с помощью ] ltrace или strace на них. В Linux они оба читают файловую систему / proc и для каждого найденного pid (каталога) проходят путь таким образом, чтобы идентифицировать процесс по его имени или другим атрибутам. Технически, как это делается, зависит от ядра и системы. Обычно они читают из / proc / / stat , который содержит имя команды во втором поле. Для pkill -f и pgrep проверьте запись / cmdline для каждой записи процесса PID.

pkill и pgrep используют системный вызов readproc , тогда как killall нет. Я не могу сказать, есть ли разница в производительности: вам придется протестировать это самостоятельно.

0
10.10.2018, 22:27
2 ответа

Большое спасибо @glenn jackman, вы подняли мой скилл. Итак, команда, которая сработала для меня, это:

for dir in /mnt/data/service/fmriprep/geht/sub-P*; do if [ -d "$dir" ]; then  
num=${dir##*P} && python 2_correlation.py -i "$dir" -o 
"/mnt/data/service/corr_graph/correlation_P${num}.csv";fi done
0
28.01.2020, 02:31

Для каждой итерации цикла необходимо извлекать цифры после «P» и использовать их в имени CSV-файла:

in_dir=/mnt/data/service/fmriprep/geht
out_dir=/mnt/data/service/corr_graph

for dir in "$in_dir"/sub-P*; do 
    num=${dir##*P}
    python 2_correlation.py -i "$dir" -o "$out_dir/correlation_P${num}.csv"
done
2
28.01.2020, 02:31

Теги

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