本节linux指令笔记
将程序运行结果导出到指定文件中./a.out > /dev/null & 。。。。
转化成后台运行的进程得到[1]XXXXX
进程IDps aux | grep a.out 查看进程
kill (进程ID) 杀死进程磁盘上的程序—剧本内存中的进程
在Linux下,由一段简单的循环C语言程序学习两个简单的汇编指令:com与Jump;
void main()
{
int counter ;
printf("count your fngers!\n");
counter=0;
while(counter<10)
{ counter++;
printf("counter = %d\n",counter);
}
}</span>
000000000040057d <main>:
40057d: 55 push %rbp
40057e: 48 89 e5 mov %rsp,%rbp
400581: 48 83 ec 10 sub $0x10,%rsp
400585: bf 44 06 40 00 mov $0x400644,%edi
40058a: e8 c1 fe ff ff callq 400450 <puts@plt>
40058f: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
400596: eb 18 jmp 4005b0 <main+0x33>
400598: 83 45 fc 01 addl $0x1,-0x4(%rbp)
40059c: 8b 45 fc mov -0x4(%rbp),%eax
40059f: 89 c6 mov %eax,%esi
4005a1: bf 57 06 40 00 mov $0x400657,%edi
4005a6: b8 00 00 00 00 mov $0x0,%eax
4005ab: e8 b0 fe ff ff callq 400460 <printf@plt>
4005b0: 83 7d fc 09 cmpl $0x9,-0x4(%rbp)<span style="white-space:pre"> </span> //比较指令
4005b4: 7e e2 jle 400598 <main+0x1b> //跳转指令(相对地址的相对跳转)
4005b6: c9 leaveq
4005b7: c3 retq
4005b8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
4005bf: 00
改动循环为死循环以理解线程:
#include<stdio.h>
void main()
{
int counter ;
printf("count your fngers!\n");
counter=0;
while(1)
{
counter++;
printf("counter = %d\n",counter);
}
}
指令查看和操作线程:
root@lanwei-K45VM:/home/study/lesson3# ./a.out >/dev/null & //将程序转为后台运行(跑起了一个线程)
[1] 4174<span style="white-space:pre"> </span> //线程ID
root@lanwei-K45VM:/home/study/lesson3# ps aux | grep a.out //查看当前线程
lanwei 4094 0.0 0.0 33752 1916 pts/23 S+ 22:14 0:00 vi a.out.list
root 4174 100 0.0 4196 356 pts/5 R 22:23 1:23 ./a.out
root 4192 0.0 0.0 15956 928 pts/5 S+ 22:24 0:00 grep --color=auto a.out
root@lanwei-K45VM:/home/study/lesson3# kill 4094<span style="white-space:pre"> </span> //尝试杀死4094线程
root@lanwei-K45VM:/home/study/lesson3# ps aux | grep a.out //查看确认
root 4174 100 0.0 4196 356 pts/5 R 22:23 2:06 ./a.out
root 4197 0.0 0.0 15956 928 pts/5 S+ 22:25 0:00 grep --color=auto a.out
root@lanwei-K45VM:/home/study/lesson3# kill 4174
root@lanwei-K45VM:/home/study/lesson3# ps aux | grep a.out
root 4199 0.0 0.0 15956 928 pts/5 S+ 22:25 0:00 grep --color=auto a.out
[1]+ 已终止 ./a.out > /dev/null
root@lanwei-K45VM:/home/study/lesson3#
通过本次学习,初步理解了程序和线程的关系,磁盘中的程序就好比一个剧本,内存中线程则好比一场照着剧本进行的演出,关系简洁明了!同时学习了料条汇编指令:比较和跳转,这让从未接触过汇编的我感觉到在LinuxC的学习过程中,不仅要打好C编程的基础,更要学会看懂汇编语言,了解操作系统的运行原理,嵌入式LinuxC的学习之路,还很漫长!