Попытка написать оболочку типа Unix на Python, используя fork, exec и pid wait - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь написать оболочку типа Unix на Python, используя fork, exec и waitpid.Пока у меня есть этот код:

while True:
    pid = os.fork()
    command = os.getcwd() + ">"
    x = input(command)
    split_string = x.split(" ")
    if pid == 0:
        os.execvp(split_string[0], split_string)
    else:
        finish = os.waitpid(0, 0)
    print(finish)

Однако, когда я использую его из оболочки Unix, он ничего не делает.

1 Ответ

0 голосов
/ 12 марта 2019

Обратите внимание, что ваше приглашение (вы назвали его command) печатается дважды.Это связано с тем, что дочерний процесс застревает в собственной подсказке, ожидая ввода команды.Если вы нажмете Enter один раз, а затем наберете свою команду (например, ls), а затем еще раз нажмите Enter , тогда ваша программа заработает.

Это легко исправитьэто поставить вызов os.fork() после приглашения:

import os

while True:
    command = os.getcwd() + ">"
    x = input(command)
    split_string = x.split(" ")
    pid = os.fork()
    if pid == 0:
        os.execvp(split_string[0], split_string)
    else:
        finish = os.waitpid(0, 0)
    print(finish)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...