Home > Back-end >  Missing output after execvp on Ubuntu 22?
Missing output after execvp on Ubuntu 22?

Time:12-16

I have a short Python code (main.py):

#!/usr/bin/bash                                                                 
import os                                                                       
import subprocess                                                               
print(os.getpid())                                                              
os.execvp("ls", ["ls", "-a"])                                                   
print("hello") 

When I run it I can see the terminal output of os.getpid() and os.execvp commands, but no print("hello").

However when I have another file (another.py) with the content of:

#!/usr/bin/bash                                                                                                                 
print("hello") 

And then change main.py to be:

#!/usr/bin/bash                                                                 
import os                                                                       
import subprocess                                                               
print(os.getpid())                                                              
os.execvp("python3", ["python3", "another.py"])                                                   

Then I can see the output of os.getpid() and print("hello")

What is the idea behind execvp?

CodePudding user response:

A very simple script that illustrates fork exec and wait

import os

print('this will run once')

pid = os.fork()
# duplicates the current process after this point

if pid < 0:
    print('error forking')
    exit()

print('this will run twice')

if pid == 0:
    # we are inside child process
    print('hello from child')
    os.execvp("echo", ["echo", "hello from echo"])
    print('this will not run because child process has been completely replaced by echo process')
else:
    os.wait()
    # wait child process to exit
    print('hello from parent')
  • Related