4

bash では、ls入力して Enter キーを押すと、バイナリlsが実行され、何もしなくてもシェル プロンプトに戻ります。

ただし、C で記述されたこのプログラムはブロックされます。

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main(void)
{
    pid_t other = fork();
    // other will be 0 for the child process
    // other will be the childs process' value in the parent process.

    switch(other) {
        case 0:
            printf("%s %i\n", "I am the child process!", other);
            execl("/bin/ls","ls",NULL);         
            return 0;
        default:
            printf("%s %i\n", "I am the parent process!", other);
            return 1;
    }

}

なんで?

出力は次のとおりです。

Korays-MacBook-Pro:~ koraytugay$ ./a.out 
I am the parent process! 40309
I am the child process! 0
Korays-MacBook-Pro:~ koraytugay$ AndroidStudioProjects  Movies          happyko         koray.i
Applications        Music           hello.c         koray.o
ClionProjects       Pictures        hello.sh        koray.s
Code            Public          innbound        mssql
Desktop         TheElementsFiles    innbound-pf     nono.txt
Documents       VirtualBox VMs      innbound_usage.log  svn-key
Downloads       a.out           k.txt           tugay.c
IdeaProjects        asm.asm         klinnck         webtoolkit
Koray.class     asm.hack        klinnck-pf
Koray.java      cexamples       koray.a
Library         fifa.sql        koray.c

この時点でEnter、bash プロンプトに戻るためにヒットする必要があります。なんで?

4

2 に答える 2

5

この時点でENTER、bash プロンプトに戻るためにヒットする必要があります。

実際、あなたはすでにプロンプ​​トに戻っていますが、あなたはそれに気づいていません。

詳しく説明すると、ここで直面している問題は、親が子が終了するのを待たず、子が実行を終了する前に戻ってくることです。そのため、シェル プロンプトが返され、chlid プロセスからの出力 (の出力ls) が出力に表示されます。

適切に気づいた場合、プロンプトは既に戻っており、出力後で表示されます。

Korays-MacBook-Pro:~ koraytugay$ ./a.out 
I am the parent process! 40309
I am the child process! 0
****Korays-MacBook-Pro:~ koraytugay$***** AndroidStudioProjects  Movies          happyko         koray.i
Applications        Music           hello.c         koray.o
ClionProjects       Pictures        hello.sh        koray.s
Code            Public          innbound        mssql
Desktop         TheElementsFiles    innbound-p

上記、****マーク線に注意してください。そこで、シェルプロンプトが戻ってきました。

于 2015-06-02T08:07:01.840 に答える
4

この時点で、Enter キーを押して bash に戻る必要があります。

いいえを除いて、あなたはすでにbashにいます。しかし、プロンプトの後に ls が出力されると、そうではないように見えます。別のコマンドを試してください。

于 2015-06-02T08:06:56.793 に答える