如何获取linux内核线程的pid

如何获取linux内核线程的pid,第1张

通过查看资料,发现一种比较简单的方法就是在代码中使用printf将当前线程的id打印出来。

而这也分成两种情况:

1 如果是pthread,则使用,

#include <pthreadh>

pthread_t pthread_self(void);

2 如果不是pthread,即是由内核创建的线程,则使用,

#include <sys/typesh>

pid_t gettid(void);

获取线程所在的进程的id,方法如下:

#include <sys/typesh>

#include <unistdh>

pid_t getpid(void);

pid_t getppid(void);

所以,我们在代码中使用如下的语句打印:

printf("\ntid=%lu, pid=%lu\n", gettid(), getpid());

这样就能获取当前代码所在的线程和进程了。

根据打印出来的进程的pid,获取进程名的方法是:

ls -lh /proc/pid/exe

lrwxrwxrwx 1 root root 0 Jan 1 20:48 /proc/pid/exe ->

sh-32#

查看thread id的方法有:

1 sh-32# ps -efL | grep process,

ps命令指定-L命令选项可以用来查看进程下所包含的所有线程。

2 sh-32# ls -l /proc/pid/task/

查看进程下当前有哪些task,这些task指的就是线程。

在Android中,Activity有个栈,一个Activity结束掉,会回到上一个Activity,并不是退出应用程序

Android中,退出应用程序的方式:

1通过pid

int pid = androidosProcessmyPid(); //获取当前应用程序的PID

androidosProcesskillProcess(pid); //杀死当前进程

这种方法退出应用,是会保留某些后进程,例如:Service,Notifications等。

2通过ActivityManager

ActivityManager manager = (ActivityManager)contextgetSystemService(ACTIVITY_SERVICE); //获取应用程序管理器

managerkillBackgroundProcesses(getPackageName()); //强制结束当前应用程序

这种方式退出应用,会结束本应用程序的一切活动,因为本方法会根据应用程序的包名杀死所有进程包括Activity,Service,Notifications等。

在Android中,Activity有个栈,一个Activity结束掉,会回到上一个Activity,并不是退出应用程序。Android中,退出应用程序的方式:1通过pidintpid=androidosProcessmyPid();//获取当前应用程序的PIDandroidosProcesskillProcess(pid);//杀死当前进程这种方法退出应用,是会保留某些后进程,例如:Service,Notifications等。2通过ActivityManagerActivityManagermanager=(ActivityManager)contextgetSystemService(ACTIVITY_SERVICE);//获取应用程序管理器managerkillBackgroundProcesses(getPackageName());//强制结束当前应用程序这种方式退出应用,会结束本应用程序的一切活动,因为本方法会根据应用程序的包名杀死所有进程包括Activity,Service,Notifications等。

getppid() 获取父进程 id,

getpid() 获取当前进程 id

比如

int main()

{

int pid = fork();

if (pid == 0)

{

// child

printf ("ParentID is %d\n", getppid());

}

esle

{

printf("I'm parent, id %d\n", getpid());

wait(NULL);

}

return 0;

}

再就是程序编译没错,但是运行时出现“实时信号 2”

没有源码,谁也帮不上你。 你可以用 gdb去调试。

1理解

uid:uid 对于 应用来说其实就是指我们当前应用是在那个 group 组内

就是指这个shareuserid,一个组内的uid相同,,并且具有相同的uid的应用才能共享用户内存

pid:是指每个进程在liunx下的 进程的id 是唯一的。

2获取

获取uid:

PackageManager pm = getPackageManager();

ApplicationInfo ai = pmgetApplicationInfo("comspeedsoftwarerootexplorer", PackageManagerGET_ACTIVITIES);

Logd("!!", "!!" + aiuid);

获取pid:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);  List<ActivityManagerRunningAppProcessInfo> list = activityManagergetRunningAppProcesses();

for(ActivityManagerRunningAppProcessInfo runningAppProcessInfo : list){

if(runningAppProcessInfopid == pid){

processName = runningAppProcessInfoprocessName;

            }

        }

以上就是关于如何获取linux内核线程的pid全部的内容,包括:如何获取linux内核线程的pid、Android 能不能监听到第三方应用App的启动和退出、如何在Android中的Activity启动第三方应用程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9644148.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存