3e03d3fb6a
adb bugreport > b & sleep 5; kill $? will show that a bunch of tools will SIGPIPE when trying to output data which is normal. We don't have a way on linux (bsd yes), to set NOSIGPIPE on the file desc passed down via fork/exec. Bug: 6447319 Change-Id: I25b30a823addcff89d252f162d0a07035d4fdd3f
87 lines
2.2 KiB
C++
87 lines
2.2 KiB
C++
/*
|
|
* Command that dumps interesting system state to the log.
|
|
*
|
|
*/
|
|
|
|
#define LOG_TAG "dumpsys"
|
|
|
|
#include <utils/Log.h>
|
|
#include <binder/Parcel.h>
|
|
#include <binder/ProcessState.h>
|
|
#include <binder/IServiceManager.h>
|
|
#include <utils/TextOutput.h>
|
|
#include <utils/Vector.h>
|
|
|
|
#include <getopt.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <sys/time.h>
|
|
|
|
using namespace android;
|
|
|
|
static int sort_func(const String16* lhs, const String16* rhs)
|
|
{
|
|
return lhs->compare(*rhs);
|
|
}
|
|
|
|
int main(int argc, char* const argv[])
|
|
{
|
|
signal(SIGPIPE, SIG_IGN);
|
|
sp<IServiceManager> sm = defaultServiceManager();
|
|
fflush(stdout);
|
|
if (sm == NULL) {
|
|
ALOGE("Unable to get default service manager!");
|
|
aerr << "dumpsys: Unable to get default service manager!" << endl;
|
|
return 20;
|
|
}
|
|
|
|
Vector<String16> services;
|
|
Vector<String16> args;
|
|
if (argc == 1) {
|
|
services = sm->listServices();
|
|
services.sort(sort_func);
|
|
args.add(String16("-a"));
|
|
} else {
|
|
services.add(String16(argv[1]));
|
|
for (int i=2; i<argc; i++) {
|
|
args.add(String16(argv[i]));
|
|
}
|
|
}
|
|
|
|
const size_t N = services.size();
|
|
|
|
if (N > 1) {
|
|
// first print a list of the current services
|
|
aout << "Currently running services:" << endl;
|
|
|
|
for (size_t i=0; i<N; i++) {
|
|
sp<IBinder> service = sm->checkService(services[i]);
|
|
if (service != NULL) {
|
|
aout << " " << services[i] << endl;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (size_t i=0; i<N; i++) {
|
|
sp<IBinder> service = sm->checkService(services[i]);
|
|
if (service != NULL) {
|
|
if (N > 1) {
|
|
aout << "------------------------------------------------------------"
|
|
"-------------------" << endl;
|
|
aout << "DUMP OF SERVICE " << services[i] << ":" << endl;
|
|
}
|
|
int err = service->dump(STDOUT_FILENO, args);
|
|
if (err != 0) {
|
|
aerr << "Error dumping service info: (" << strerror(err)
|
|
<< ") " << services[i] << endl;
|
|
}
|
|
} else {
|
|
aerr << "Can't find service: " << services[i] << endl;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|