Articles of 系统调用

如何find在Linux中发起系统调用的进程的进程ID?

我在Linux内核中添加了一个自定义的系统调用。 现在我想找出发出这个系统调用的进程的id。 如果我在系统调用中使用当前指针,我会得到当前正在运行的进程的信息。 尤其是在多进程环境下,可能不是发出系统调用的实际进程。 例如,在用户空间程序中,我有代码。 int pid = fork(); if(pid < 0) { <statements>; } else if(pid == 0) { mysystemcall(); } 这只是一个例证。 现在我们不知道父subprocess的执行顺序了。 在系统调用中, 当前指针可能不会指向发出该系统调用的父进程的task_struct。 那么我怎么能find这个过程

linux kallsyms R符号不显示

我不想find系统调用表的内核地址。 我通常通过grep sys_call来做到这一点,但在一个系统中,我可以看到地址,但在其他地方,它不显示条目。 root@ubuntu:~# cat /proc/kallsyms | grep sys_call ffffffff8122aa90 t proc_sys_call_handler ffffffff81726432 t ret_from_sys_call ffffffff81726644 T int_ret_from_sys_call ffffffff81728146 t sysexit_from_sys_call ffffffff81728386 t sysretl_from_sys_call ffffffff8172858e t ia32_ret_from_sys_call **ffffffff81801400 R sys_call_table** ffffffff81809cc0 R ia32_sys_call_table root@ubuntu:~# 没有系统调用表…为什么不显示R型符号? / $ cat /proc/kallsyms | grep sys_call ffffffff8119c230 t proc_sys_call_handler ffffffff817a1a57 t ret_from_sys_call ffffffff817a1c50 T int_ret_from_sys_call ffffffff817a2cb8 t sysexit_from_sys_call ffffffff817a2ed8 […]

对于Linux,如何使用系统调用来终止会话中的所有进程(具有相同的SID)?

我正在尝试使用C调用系统调用来清除会话中的所有进程(使用相同的SID)。我不想使用特定的PGID来终止所有进程,因为并不是所有我感兴趣的进程都没有相同的PGID,但它们具有相同的SID。 我的研究只发现了这一点,Graeme为脚本提供了一个很好的答案: https : //unix.stackexchange.com/questions/124127/kill-all-descendant-processes 我很乐意得到一个答案,说明如何杀死所有直系后代的孩子,甚至更高兴我怎么能够在会议中杀死所有的孩子。 或者是我所问的可能? 我不是一个解决scheme,我只是简单地列出父辈的后代的PID。

VT-100命令工作奇怪

我正在用NASM写简单的时钟程序。 我在OSX上通过iTerm使用Ubuntu 14.10 Vagrant框。 terminal是xterm,所以应该是VT-100兼容。 我需要删除一行。 例如,我期望以下行为: Hello, this is clock program 13:01:25 UTC+4 下一刻: Hello, this is clock program 13:01:26 UTC+4 我写了下面的函数。 打印: func_print: mov eax, sys_write mov ebx, stdout int 0x80 ret 为了清楚: clr db 0x1b, "[K" clr_len equ $-clr … func_clear: mov ecx, clr mov edx, clr_len call func_print 为了保存和恢复职位,我使用VT-100及其命令: [7分别为[7和[8 : […]

mknod()不创build命名pipe道

我正在尝试使用mknod()命令创build一个名为pipe的FIFO: int main() { char* file="pipe.txt"; int state; state = mknod(file, S_IFIFO & 0777, 0); printf("%d",state); return 0; } 但该文件不是在我的当前目录中创build的。 我试着用ls -l把它ls -l 。 状态返回-1。 我在这里和其他网站上发现了类似的问题,我尝试了大多数build议的解决scheme: int main() { char* file="pipe.txt"; int state; unlink(file); state = mknod(file, S_IFIFO & 0777, 0); printf("%d",state); return 0; } 这没有什么区别,但错误依然存在。 我在这里做错了什么,或者有什么系统干预导致这个问题? 帮助..在此先感谢

克隆/ fork / vfork之后,父进程和subprocess具有不同的返回地址

我在centos 6.6上工作,并想为post-clone添加一个post-clone钩子。 我已经将syscall_table[__NR_clone]更改为我的函数,在那里我将栈上的返回地址更改为我的syscall_table[__NR_clone]函数,然后将其跳转到实际的系统调用clone以便在实际系统调用之后,程序将返回到我的post-clonefunction。 由于我在实际的clone发生之前更改了堆栈上的返回地址,所以父进程和subprocess都应该具有相同的返回地址。 但是,只有父进程返回到我post-clone ,而subprocess返回到实际的返回地址。 希望有人能帮我弄清楚为什么这样做。

如何获取/ proc / / status的信息

是否有一个定义的结构来获取该文件的每个字段的特定进程而不是parsing文件?

CPU热插拔 – 是否有一个系统调用,以禁用在CPU的CPU?

Linux具有启用/禁用cpu的' cpu hotplug 'function。 我想从C程序禁用计算机的cpus之一,所以我的问题是 – 怎么样? 可能吗 ? 在这里我find了以下内容: 问:我如何逻辑离线一个CPU? 答:请执行以下操作: #echo 0> / sys / devices / system / cpu / cpuX / online Coudlnt在本文档中find了有关系统调用的任何信息,所以希望有人能够对此有所了解,谢谢!

nasm系统调用Linux

我有一个关于在组装Linux x86系统调用的问题。 当我在linux上用nasm创build一个新的汇编程序时,我想知道为了完成特定任务(例如读取文件,写入输出或简单退出…)必须使用哪些系统调用。 我知道一些系统调用,因为我已经读过一些互联网上的例子(如eax = 0,ebx = 1 int 0x80退出,返回值为1),但没有更多…我怎么知道是否有其他退出系统调用的参数? 还是换另一个系统调用? 我正在寻找一个文档,解释哪些系统调用哪些parameter passing在哪些寄存器。 我已经阅读了有关退出函数等的手册页,但没有向我解释我在问什么。 希望我很清楚, 谢谢!

即使所有pipe道closures,程序仍然要input

我正试图实现这种情况: 叉子和pipe子情景 其中两个并行进程通过pipe道连接到tr /az/ /AZ/ ,最后tr /az/ /AZ/进程连接到stdout。 我写了这个程序,试图达到我的目标: #include<stdio.h> #include<unistd.h> #include<wait.h> int main() { int dummy; int fd[2]; int i; char* lsargs[] = {"/bin/ls", "-l", NULL}; char* lsargs2[] = {"cat", "/etc/group", NULL}; char* lsargs3[] = {"tr", "/az/", "/AZ/", NULL}; char** am[] = {lsargs, lsargs2, lsargs3}; pipe(fd); for ( i = 0 ; i < […]