1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef BASE_LINUX_UTIL_H_
6 #define BASE_LINUX_UTIL_H_
10 #include <sys/types.h>
14 #include "base/base_export.h"
18 static const char kFindInodeSwitch
[] = "--find-inode";
20 // This is declared here so the crash reporter can access the memory directly
21 // in compromised context without going through the standard library.
22 BASE_EXPORT
extern char g_linux_distro
[];
24 // Get the Linux Distro if we can, or return "Unknown".
25 BASE_EXPORT
std::string
GetLinuxDistro();
27 // Set the Linux Distro string.
28 BASE_EXPORT
void SetLinuxDistro(const std::string
& distro
);
30 // Return the inode number for the UNIX domain socket |fd|.
31 BASE_EXPORT
bool FileDescriptorGetInode(ino_t
* inode_out
, int fd
);
33 // Find the process which holds the given socket, named by inode number. If
34 // multiple processes hold the socket, this function returns false.
35 BASE_EXPORT
bool FindProcessHoldingSocket(pid_t
* pid_out
, ino_t socket_inode
);
37 // For a given process |pid|, look through all its threads and find the first
38 // thread with /proc/[pid]/task/[thread_id]/syscall whose first N bytes matches
39 // |expected_data|, where N is the length of |expected_data|.
40 // Returns the thread id or -1 on error. If |syscall_supported| is
41 // set to false the kernel does not support syscall in procfs.
42 BASE_EXPORT pid_t
FindThreadIDWithSyscall(pid_t pid
,
43 const std::string
& expected_data
,
44 bool* syscall_supported
);
48 #endif // BASE_LINUX_UTIL_H_