Трудно вообразить, почему Вы даже хотели бы сделать это, уже не говоря о том, где Вы найдете, что источник (или источники) сценариев загружают и работают как это достаточно часто, что этому нужен специальный инструмент.
Почему не только загружают сценарий curl
(или wget
или snarf
или безотносительно), исследуйте и отредактируйте его (это - редкий сценарий, что привычке нужно некоторое удовлетворение требованиям заказчика для Вашей конкретной системы), и затем выполните его - любой путем создания его исполняемым файлом с chmod
или с sh scriptname
?
Эвристическим образом см. https://stackoverflow.com/questions/12213445/identifying-kernel-threads
ps
и top
(от procps-3.28) не, используют "командной строки" в качестве проверки и не знают о PF_KTHREAD
. Именно это инициировал их для добавления [``]
к имени процесса это не часть фактического имени процесса. Так как командная строка находится под контролем самого процесса, возможно, что это было изменено.
Это зависит от как далеко назад (2.4? 2.2?) необходимо пойти. Быстрый хлам в нескольких системах не указывает ни на какой очевидный общий флаг (поле 9 /proc/PID/stat
)
На последнем 2.6.x можно главным образом предположить родительский PID, являющийся 0 для [kthreadd]
, это часто будет иметь PID 2, и все потоки будут его детьми (init
может иметь PPID=0 также). Или возможно (рано 2.6.x?) a [kthread]
вместо этого, но не PID 2, но это может только быть родитель большинства, не все потоки.
Иначе должен осмотреть /proc/PID/maps
(карта распределения памяти пространства пользователя), для потока ядра это будет пусто - поэтому как долго флаг процесса (в /proc/PID/stat
) не &(PF_EXITING)
, /proc/PID/maps
быть пустым является хорошим индикатором. Обратите внимание, что необходимо на самом деле читать maps
, не просто stat()
это, так как размер неверно передан как 0; и у Вас должно также быть разрешение, если Вы не делаете это может казаться пустым, не вызывая ошибку.
for pp in /proc/[0-9]*; do
if [ -z "$(< $pp/maps)" ]; then echo ${pp##/proc/}; fi;
done
Вы могли добавить подобное выражение для проверки этого cmdline
также пусто.
Заглядывание /proc
запись потока ядра на 3,8 серийных ядрах, по-видимому, exe
ссылка пуста, statm
полно, обнуляет, status
отсутствует весь Vm*
записи и maps
пусто также.
Возможно, некоторые из них относятся к более старому рассматриваемому ядру.
isKernelThread(pid)
Я просто тестирую длину файла, и это, кажется, работает хорошо.if not len(readProcFile('/proc/%s/maps' % pid)): return True
– tMC 21.10.2013, 17:05