#include <stdio.h>int main(voID){ return 0;}
何时以及如何为上述程序创建过程控制块?
例如,在上述程序进入运行状态之前,内核必须为此进程分配一个pcb.
我在哪里可以找到对内核进行的各种启动系统调用,以便我可以将这些调用跟踪到内核中.
我对上述程序进行了 *** 作,但我无法得到它.
execve("./a.out",["./a.out"],[/* 42 vars */]) = 0brk(0) = 0x9aaf000access("/etc/ld.so.nohwcap",F_OK) = -1 ENOENT (No such file or directory)mmap2(NulL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0xb78df000access("/etc/ld.so.preload",R_OK) = -1 ENOENT (No such file or directory)open("/etc/ld.so.cache",O_RDONLY) = 3fstat64(3,{st_mode=S_IFREG|0644,st_size=112037,...}) = 0mmap2(NulL,112037,PROT_READ,MAP_PRIVATE,3,0) = 0xb78c3000close(3) = 0access("/etc/ld.so.nohwcap",F_OK) = -1 ENOENT (No such file or directory)open("/lib/i386-linux-gnu/libc.so.6",O_RDONLY) = 3read(3,"7ELF0o04"...,512) = 512fstat64(3,{st_mode=S_IFREG|0755,st_size=1462852,1473032,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_DENYWRITE,0) = 0x456000mprotect(0x5b7000,4096,PROT_NONE) = 0mmap2(0x5b8000,12288,MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE,0x161) = 0x5b8000mmap2(0x5bb000,10760,MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,0) = 0x5bb000close(3) = 0mmap2(NulL,0) = 0xb78c2000set_thread_area({entry_number:-1 -> 6,base_addr:0xb78c28d0,limit:1048575,seg_32bit:1,contents:0,read_exec_only:0,limit_in_pages:1,seg_not_present:0,useable:1}) = 0mprotect(0x5b8000,PROT_READ) = 0mprotect(0x8049000,PROT_READ) = 0mprotect(0xa92000,PROT_READ) = 0munmap(0xb78c3000,112037) = 0exit_group(0) = ?
需要一些提示来期待….
解决方法 进程的创建发生在内核空间而非用户空间中,因此您不会在任何用户空间库中找到用于创建特定于进程的事物的代码. (您可以在用户空间库中找到的是.so文件加载器/运行时链接器等)实际创建的进程发生在系统调用fork()或clone()中.这会导致调用进程分为两个,父进程和子进程.系统调用的返回值将告诉调用进程它们是哪一个.最常见的用法是fork()之后的子进程执行exec()系统调用.这会导致使用调用者资源(文件描述符,环境,用户,组,当前工作目录等)将进程程序替换为新的可执行文件.
如果你 *** 作一个执行shell脚本的shell,你可以看到这个动作.
总结以上是内存溢出为你收集整理的何时以及如何创建过程控制块全部内容,希望文章能够帮你解决何时以及如何创建过程控制块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)