我遇到了一个 Linux 命令,builtin cd
.
builtin cd
命令和有什么区别cd
?
事实上,我对这种差异进行了一些研究,但我找不到对此有显着意义的解释。
bash
我对带有和sh
扩展名的文件进行了一些研究。大多数人和资源都说,如果文件有bash
扩展名,那么它就包含bash
脚本。同样,带有sh
扩展名的文件包含sh
脚本。
但是,我找不到 bash 和 sh 脚本之间的区别。有一些课程和文章旨在教人们在 shell 上编写脚本,它们都有标题shell scripting
。
在这一点上,shell脚本对应的是哪一个?
Bash 脚本或 Sh 脚本。
我试图理解的是 bash 和 sh 脚本之间的区别。
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main( int argc, char *argv[] ){
FILE *fptr;
pid_t pid;
fptr = fopen("Shared File.txt", "a");
pid = fork();
if( pid > 0 ){ // parent process
int counter = 0;
while( counter < 10 ){
fprintf(fptr, "a");
++counter;
}
wait(NULL);
}
else{
int counter = 0;
while( counter < 5 ){
fprintf(fptr, "b");
++counter;
}
}
return 0;
}
当我执行此代码时,代码生成的文件包含以下消息:bbbbbaaaaaaaaa
每当我执行此代码时,我都会收到相同的消息。为什么进程不按洗牌顺序写入文件?
为什么操作系统首先尝试完成子进程?
我对消息的期望是这样的: baabbaaabaaabaa 进程之间没有连续的过渡。
我找到了一些关于什么是“地址绑定”的解释。他们说“地址绑定是将虚拟或逻辑地址映射到物理地址的操作”。
这个定义正确吗?
我无法确定它是否正确,因为大学演讲说将虚拟地址转换为物理地址是在执行时执行的。但是,地址绑定表示绑定操作可以在编译时、加载时或执行时实现。
这说明存在矛盾。
我是操作系统和 Linux 的新手,因此这可能是非常基本的问题,但我找不到答案。
根据我目前阅读的资源,该fork()
方法通过生成对操作系统的系统调用来创建新进程。创建的进程是调用进程的精确副本。
但是,我认为创建的进程(子)和调用进程(父)并不完全相同。fork()
父进程中方法之前的代码不会复制到子进程。
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void){
X
int child1 = fork();
A
B
C
D
int child2 = fork();
E
F
return 0;
}
child2 进程不包含代码行 ABCD ,而 child1 进程包含除 X 之外的所有行。实际上这是我的想法。另一方面,在任何地方,都说子进程是父进程的精确副本。
谁能说哪一个是真的?