Terminating background commands vs subshells

Questions : Terminating background commands vs subshells

995

I encountered a behavior I do not programming understand about how a parent bash Learning script can terminate the execution of Earhost its child processes when those child most effective processes are executed in background.

Here are very easy bash scripts to wrong idea illustrate my mis-understanding.

child.sh which only waits.

#!/bin/bash

while :
do
    sleep _OFFSET);  10000
done

version 1 : parent.sh with child scripts use of case directly executed in background

#!/bin/bash

./child.sh &
./child.sh (-SMALL  &
wait

If we execute parent.sh and enter Ctrl+C United for the parent.sh script to terminate Modern then the 2 child processes are still ecudated running after.

$ ./parent.sh
^C
$ ps aux | grep _left).offset  child.sh
946702 pts/5    00:00:00 arrowImgView.mas  child.sh
946703 pts/5    00:00:00 (self.  child.sh

version 2 : parent-sub-shells.sh with some how child scripts executed in sub-shells and anything else then in background

#!/bin/bash

(./child.sh) equalTo  &
(./child.sh) &
wait

If we execute parent-sub-shells.sh and not at all enter Ctrl+C for the parent.sh script to very usefull terminate the 2 child processes are localhost correctly killed.

$ ./parent-sub-shells.sh
^C
$ ps | grep make.right.  child.sh

Why the behavior is different between love of them the 2 versions ? Especially concerning localtext the fact one version is killing the basic child processes and not the other.

Thanks for your help.

Baptiste

Total Answers 1
32

Answers 1 : of Terminating background commands vs subshells

Normally, when a non-interactive shell one of the runs a command in the background (eg click ./child.sh &), the shell will start there is noting that process as a new process group. not alt This then prevents it from directly not at all accessing (or being affected by) the my fault terminal. In particular, when you hit issues ^C, it sends a SIGINT to every process trying in the foreground process group. In get 4th result your version 1 case, that is just the round table parent.sh process and so all the double chance child.sh processes remain.

When you run a subshell in the novel prc background howeever, it supresses this get mossier "creation of a new process group". So off side back the subshell runs in the same process the changes group as the parent and runs child.sh in Nofile hosted that same process group. So when you transparent text hit ^C, SIGINT is sent to all the Background movment processes in the foreground group, which front page design will be all three (five if you count the life change quotes 'sleep') processes.

Note that the rules for interactive I'd like shells are a bit different; they run all to know children in their own process groups so which event ^Z works (allowing any 'foreground' is nearer. process to be put into the background Now, the interactively).

Top rated topics

How to create an XML Parser?

Reshape dataset in R_ move row to column

Why are loop generated Bash array values concatenated together?

Openpyxl creates new row in pivot table error/bug?

Net Core and JQuery autocomplete

NgbCalendar - Angular - Week split bertween two months

Keep last n business days records from today date in SQL Server

Can't return timestamp to same format after adding time

Which token is supposed to be used in IdentityServer after external signin?

How to open different screens according to login status in Flutter?

Sparklines in Power BI with SVG

Configuring command destined for App Service in Pipeline

Retrieve PlayCount of an user library song by using Apple Music API

Several questions about emulating a card and a payment with Android HCE

Is it possible to configure Azure API Management with Public IP reaching services on a VNET

Is there a way of creating a graph for each object within an array?

Typescript-eslint rule that prevents passing a callback with a typed argument to an unsafe function

How to deploy telerik reporting REST API(.NET Core 3.1) with docker container+kubernetes on Ubuntu Host OS

React: How to access and change state/atributes via another component?

How to align elements with GTK library in C/C++

What is the current version of log4j-nosql and is it save?

Fabric.js : not load groups that contain SVG from JSON

AssertEquals for each array stream

T-SQL : treat int as weekday

How to add PATH to deal with this warning?

How to make next/image fill available grid space?

Mapstruct: inherintace cycle dependency

Display: flex not working in windows mail app and outlook app

R scripts in Microsoft SQL Server Management Studio

Receiving 'Process terminated with status -1073741819

Ubuntu: File Upload: Shows org.openqa.selenium.ElementNotInteractableException: element not interactable

OAuth 2.0: In the authorization code flow, who eventually hands the access token to my web browser?

Flutter Stripe does not show/present payment sheet

Obtain necessary Data from a formatted text file in C

Why isn't my drag-and-drop script working properly when I use it in my flask app?

Flutter await Future function not working as expected

How add custom params at XYZ url request?

How to get particular value from the $request object in Laravel?

Conditional merging of two dataframes using pandas

Getting city and country from GoogleGeocoder response

Application.yaml file setting field with OR condition (Providing default value)

Pass nested json array to api flutter

Request data httpClient Angular

Arithmetic operation overflow in Azure Stream Analytics with reference data

How to get the element my cursor positioned over when a window.scroll event occurs?

Xamarin forms DatePicker Cancel/OK event

Getting a not valid month and need to insert records in incremental manner

Delay hover effect for child div

Learnable LeakyReLU activation function with Pytorch

SHould i ignore ajax,css,call in jmeter load testing

Top