Это немного похоже на взлом, но вы можете предварительно загрузить немного кода C в качестве прокладки, чтобы перехватить вызов exit (126)
и получить его выдает сигнал SIGSTOP
группе процессов, который приостанавливает процесс (и его родителей в той же группе).
Например, если мы перехватили код выхода 2 в нашей оболочке оболочки, запустите ls
для несуществующего файла:
LD_PRELOAD=/home/meuh/shim_exit.so bash -c ' sh -c "ls -l xxx; echo"; echo '
он отобразит в фоновом режиме сообщение
[1]+ Stopped ...
, и вы сможете увидеть процессы в статусе T
wait:
~ $ ps f
PID TTY STAT TIME COMMAND
30528 pts/3 T 0:00 \_ bash -c sh -c "ls -l xxx;echo";echo
30529 pts/3 T 0:00 | \_ sh -c ls -l xxx;echo
30530 pts/3 T 0:00 | \_ ls -l xxx
На этом этапе вы можете подключиться к процессам, если они являются отлаживаемыми, или просто передний план или SIGCONT процессы для продолжения.
Вот код shim_exit.c, см. Комментарий C для компиляции.
/*
* capture calls to a routine and replace with your code
* http://unix.stackexchange.com/a/308694/119298
* gcc -Wall -O2 -fpic -shared -ldl -o shim_exit.so shim_exit.c
* LD_PRELOAD=/home/meuh/shim_exit.so ./test
*/
#define _GNU_SOURCE /* needed to get RTLD_NEXT defined in dlfcn.h */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <dlfcn.h>
/* doesnt work for syscall exit_group() */
void exit(int status){
static void (*real_exit)(int status) = NULL;
if (!real_exit) {
real_exit = dlsym(RTLD_NEXT, "exit");
char *error = dlerror();
if (error != NULL) {
fprintf(stderr, "%s\n", error);
_exit(1);
}
}
if (status==126/* || status==2*/)kill(0,SIGSTOP);
real_exit(status);
}
Из вывода iw
: драйвер с открытым исходным кодом brcmfmac
не поддерживает P2P
режим.
Поддерживаемый режим:
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
Поддержка P2P отмечена как unknown
на wikidev
Supported modes
STA (Station) mode: supported
IBSS (Ad-Hoc) mode: supported
AP (Master) mode: unsupported
Mesh (802.11s) mode: unsupported
P2P mode: unknown
Monitor mode: supported
Packet injection: unknown