Eu encontrei um comando Linux, builtin cd
.
Qual é a diferença entre os comandos builtin cd
e cd
?
Na verdade, fiz algumas pesquisas sobre a diferença, mas não consegui encontrar uma explicação notável e significativa sobre isso.
Fiz algumas pesquisas sobre os arquivos com bash
e sh
extensões. A maioria das pessoas e recursos dizem que se um arquivo tem bash
extensão, então ele contém bash
scripts. Da mesma forma, o arquivo com sh
extensões contém sh
scripts.
No entanto, não consigo encontrar as diferenças entre os scripts bash e sh. Existem alguns cursos e artigos que visam ensinar as pessoas a escrever scripts em shell, e todos eles têm o título shell scripting
.
Neste ponto, a qual shell scripting corresponde?
Bash Scripting ou script Sh.
O que eu tento entender é qual é a diferença entre scripts bash e 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;
}
Quando eu executo este código, o arquivo produzido pelo código contém esta mensagem: bbbbbaaaaaaaaaa
Sempre que executo este código, recebo a mesma mensagem. Por que os processos não gravam no arquivo em ordem aleatória?
Por que o sistema operacional tenta terminar o processo filho primeiro?
Minha expectativa sobre a mensagem é assim: baabbaaaaabaaabaa Não há transição contínua entre os processos.
Encontrei algumas explicações sobre o que é "vinculação de endereço" . Eles dizem que "a vinculação de endereços é uma operação de mapeamento de endereços virtuais ou lógicos para endereços físicos".
Esta definição está correta?
Não posso ter certeza se está correto ou não porque uma apresentação da universidade diz que a conversão de endereços virtuais em endereços físicos é realizada em tempo de execução. No entanto, a ligação de endereço diz que a operação de ligação pode ser implementada em tempo de compilação, tempo de carregamento ou tempo de execução.
Isso mostra que há uma contradição.
Se chamarmos o método fork() dentro de uma instrução if, o processo filho gerado entrará na instrução else?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(void){
int c = rand() % 50;
if( c == 0 ){
int k = fork();
}
else{
printf("ELSE");
}
return 0;
}
Depois que o fork () é executado, o processo filho imprime a mensagem "ELSE"?
Sou novo em sistemas operacionais e Linux, portanto, essa pode ser uma pergunta muito básica, mas não consigo encontrar uma resposta.
De acordo com os recursos que li até agora, o fork()
método cria um novo processo gerando uma chamada de sistema para o sistema operacional. O processo criado é uma cópia exata do processo de chamada.
No entanto, acho que o processo criado (filho) e o processo de chamada (pai) não são exatamente os mesmos. Os códigos que vêm antes do fork()
método no processo pai não são copiados para o processo filho.
#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;
}
O processo child2 não contém as linhas de código ABCD, enquanto o processo child1 contém todas as linhas, exceto X. Na verdade, esse é o meu pensamento. Por outro lado, em todos os lugares, diz-se que o processo filho é uma cópia exata do processo pai.
Alguém pode dizer qual é a verdade?