Обнаружение потока ядра на пред3.0 ядрах

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

Почему не только загружают сценарий curl (или wget или snarf или безотносительно), исследуйте и отредактируйте его (это - редкий сценарий, что привычке нужно некоторое удовлетворение требованиям заказчика для Вашей конкретной системы), и затем выполните его - любой путем создания его исполняемым файлом с chmod или с sh scriptname?

2
15.08.2014, 15:09
2 ответа

Эвристическим образом см. 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 также пусто.

4
27.01.2020, 22:01
  • 1
    Это прекрасно. В функции isKernelThread(pid) Я просто тестирую длину файла, и это, кажется, работает хорошо. if not len(readProcFile('/proc/%s/maps' % pid)): return True –  tMC 21.10.2013, 17:05

Заглядывание /proc запись потока ядра на 3,8 серийных ядрах, по-видимому, exe ссылка пуста, statm полно, обнуляет, status отсутствует весь Vm* записи и maps пусто также.

Возможно, некоторые из них относятся к более старому рассматриваемому ядру.

0
27.01.2020, 22:01

Теги

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