René's URL Explorer Experiment


Title: Improve child process termination on POSIX & Windows by felixweinberger · Pull Request #1078 · modelcontextprotocol/python-sdk · GitHub

Open Graph Title: Improve child process termination on POSIX & Windows by felixweinberger · Pull Request #1078 · modelcontextprotocol/python-sdk

X Title: Improve child process termination on POSIX & Windows by felixweinberger · Pull Request #1078 · modelcontextprotocol/python-sdk

Description: Motivation and Context #729, and #850 address important failures to shut down childprocesses when MCP servers spawn subprocesses. This is not a trivial thing to fix, as there's no great cross-platform library for terminating process-trees on all platforms so we have to fork between Unix (using os.killpg) and Windows (using JobObjects via pywin32 which is the best supported external library for this: https://github.com/mhammond/pywin32) This PR adds regressions tests to clearly demonstrate the edge cases addressed + unifies the approaches from the PRs listed above. How Has This Been Tested? New regression tests added (each fails without the relevant fix). These were developed and tested on both POSIX and Windows systems. For #729 and #850 (properly terminate processes and their children across platforms): Original authors: @jingx8885, @surya-prakash-susarla Breaking Changes None. Types of changes Bug fix (non-breaking change which fixes an issue) New feature (non-breaking change which adds functionality) Breaking change (fix or feature that would cause existing functionality to change) Documentation update Checklist I have read the MCP Documentation My code follows the repository's style guidelines New and existing tests pass locally I have added appropriate error handling I have added or updated documentation as needed Additional context

Open Graph Description: Motivation and Context #729, and #850 address important failures to shut down childprocesses when MCP servers spawn subprocesses. This is not a trivial thing to fix, as there's no great cross-...

X Description: Motivation and Context #729, and #850 address important failures to shut down childprocesses when MCP servers spawn subprocesses. This is not a trivial thing to fix, as there's no great cr...

Opengraph URL: https://github.com/modelcontextprotocol/python-sdk/pull/1078

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:92ae0f54-aa3f-070d-d67f-7b1b28e9ddc3
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idB876:187CAA:22A881:2F66AA:6A5A5BC7
html-safe-nonce12c570ec6b52fd7460fd26ae8b8e8dc1c986797036fe7c5dd6e36fabee5aca0d
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCODc2OjE4N0NBQToyMkE4ODE6MkY2NkFBOjZBNUE1QkM3IiwidmlzaXRvcl9pZCI6IjkwNDk4MTEwMTc1MTcyMDkwMyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac404eb98521c1b9e6fb120a4fbd486dd44f1f10f8ce62853e8c2e699c975228ee
hovercard-subject-tagpull_request:2638246606
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/modelcontextprotocol/python-sdk/pull/1078/files
twitter:imagehttps://avatars.githubusercontent.com/u/3823880?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/3823880?s=400&v=4
og:image:altMotivation and Context #729, and #850 address important failures to shut down childprocesses when MCP servers spawn subprocesses. This is not a trivial thing to fix, as there's no great cross-...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None05b9ddf6a47d2dbe13944873a99f5fb4b83ba4871f9cb8a8e256793a63ca9687
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/modelcontextprotocol/python-sdk git https://github.com/modelcontextprotocol/python-sdk.git
octolytics-dimension-user_id182288589
octolytics-dimension-user_loginmodelcontextprotocol
octolytics-dimension-repository_id862584018
octolytics-dimension-repository_nwomodelcontextprotocol/python-sdk
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id862584018
octolytics-dimension-repository_network_root_nwomodelcontextprotocol/python-sdk
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releasef8d29d1bd03dda2dd14b3f80b8bc27e1111f43bd
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fpull%2F1078%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelcontextprotocol%2Fpython-sdk%2Fpull%2F1078%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=modelcontextprotocol%2Fpython-sdk
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Reloadhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
modelcontextprotocol https://github.com/modelcontextprotocol
python-sdkhttps://github.com/modelcontextprotocol/python-sdk
Notifications https://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk
Fork 3.7k https://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk
Star 23.6k https://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk
Code https://github.com/modelcontextprotocol/python-sdk
Issues 256 https://github.com/modelcontextprotocol/python-sdk/issues
Pull requests 303 https://github.com/modelcontextprotocol/python-sdk/pulls
Actions https://github.com/modelcontextprotocol/python-sdk/actions
Projects https://github.com/modelcontextprotocol/python-sdk/projects
Models https://github.com/modelcontextprotocol/python-sdk/models
Security and quality 6 https://github.com/modelcontextprotocol/python-sdk/security
Insights https://github.com/modelcontextprotocol/python-sdk/pulse
Code https://github.com/modelcontextprotocol/python-sdk
Issues https://github.com/modelcontextprotocol/python-sdk/issues
Pull requests https://github.com/modelcontextprotocol/python-sdk/pulls
Actions https://github.com/modelcontextprotocol/python-sdk/actions
Projects https://github.com/modelcontextprotocol/python-sdk/projects
Models https://github.com/modelcontextprotocol/python-sdk/models
Security and quality https://github.com/modelcontextprotocol/python-sdk/security
Insights https://github.com/modelcontextprotocol/python-sdk/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fmodelcontextprotocol%2Fpython-sdk%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fmodelcontextprotocol%2Fpython-sdk%2Fissues%2Fnew%2Fchoose
felixweinbergerhttps://github.com/felixweinberger
mainhttps://github.com/modelcontextprotocol/python-sdk/tree/main
fweinberger/child-process-terminationhttps://github.com/modelcontextprotocol/python-sdk/tree/fweinberger/child-process-termination
Conversation 29 https://github.com/modelcontextprotocol/python-sdk/pull/1078
Commits 3 https://github.com/modelcontextprotocol/python-sdk/pull/1078/commits
Checks 13 https://github.com/modelcontextprotocol/python-sdk/pull/1078/checks
Files changed 9 https://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Improve child process termination on POSIX & Windows https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#top
Show all changes 3 commits https://github.com/modelcontextprotocol/python-sdk/pull/1078/files
ad3747e Fix child process cleanup in stdio termination felixweinberger Jun 30, 2025 https://github.com/modelcontextprotocol/python-sdk/pull/1078/commits/ad3747e2c5b7518d699450b4e6fb2fd8f61ae79f
2d69231 Use anyio.move_on_after for process group termination timeout felixweinberger Jul 8, 2025 https://github.com/modelcontextprotocol/python-sdk/pull/1078/commits/2d69231df6f0ef85cd1da9b0e32336fb78f057d9
1a9b776 Refactor platform-specific code into src/mcp/os directory structure felixweinberger Jul 8, 2025 https://github.com/modelcontextprotocol/python-sdk/pull/1078/commits/1a9b7762c68a32021b7e60b91e2b86ef4820896a
Clear filters https://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
pyproject.toml https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2d78210c1f729556ae6d443eb0e255394d786171d32842ff2f8dea90d096da39
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-5b84af7196c96542291eccff2db54f53b10e9b7342e8ea441b468a37f8612cca
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2b322e450b69f272aada3ed88fe95bc3d75ff6ae0e7ba8f204871c4ca90946cc
utilities.py https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-c311b33a6b6ca2f6c5c9f1ec44fbfc336d4d7f6a5e7c69b9bf579b60df18b702
__init__.py https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-dbba815e00d9d38852f92f9b7b9b0bc4b7cad811a9dee386fba08e04142b74f7
utilities.py https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
test_stdio.py https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-49f66b09e4d89b29b440c955c429fe948dbcc3bbb08fffb504cf40be24382352
uv.lock https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-84321598744d84dbee2318e634c74c9aae39a1c253f1c4bd17ebf9ef2f807b11
pyproject.tomlhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
View file https://github.com/modelcontextprotocol/python-sdk/blob/1a9b7762c68a32021b7e60b91e2b86ef4820896a/pyproject.toml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/1078/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
src/mcp/client/stdio/__init__.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2d78210c1f729556ae6d443eb0e255394d786171d32842ff2f8dea90d096da39
View file https://github.com/modelcontextprotocol/python-sdk/blob/1a9b7762c68a32021b7e60b91e2b86ef4820896a/src/mcp/client/stdio/__init__.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/1078/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2d78210c1f729556ae6d443eb0e255394d786171d32842ff2f8dea90d096da39
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2d78210c1f729556ae6d443eb0e255394d786171d32842ff2f8dea90d096da39
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2d78210c1f729556ae6d443eb0e255394d786171d32842ff2f8dea90d096da39
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2d78210c1f729556ae6d443eb0e255394d786171d32842ff2f8dea90d096da39
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2d78210c1f729556ae6d443eb0e255394d786171d32842ff2f8dea90d096da39
src/mcp/os/__init__.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-5b84af7196c96542291eccff2db54f53b10e9b7342e8ea441b468a37f8612cca
View file https://github.com/modelcontextprotocol/python-sdk/blob/1a9b7762c68a32021b7e60b91e2b86ef4820896a/src/mcp/os/__init__.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/1078/{{ revealButtonHref }}
src/mcp/os/posix/__init__.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-2b322e450b69f272aada3ed88fe95bc3d75ff6ae0e7ba8f204871c4ca90946cc
View file https://github.com/modelcontextprotocol/python-sdk/blob/1a9b7762c68a32021b7e60b91e2b86ef4820896a/src/mcp/os/posix/__init__.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/1078/{{ revealButtonHref }}
src/mcp/os/posix/utilities.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-c311b33a6b6ca2f6c5c9f1ec44fbfc336d4d7f6a5e7c69b9bf579b60df18b702
View file https://github.com/modelcontextprotocol/python-sdk/blob/1a9b7762c68a32021b7e60b91e2b86ef4820896a/src/mcp/os/posix/utilities.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/1078/{{ revealButtonHref }}
src/mcp/os/win32/__init__.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-dbba815e00d9d38852f92f9b7b9b0bc4b7cad811a9dee386fba08e04142b74f7
View file https://github.com/modelcontextprotocol/python-sdk/blob/1a9b7762c68a32021b7e60b91e2b86ef4820896a/src/mcp/os/win32/__init__.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/1078/{{ revealButtonHref }}
src/mcp/client/stdio/win32.py → src/mcp/os/win32/utilities.pyhttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
View file https://github.com/modelcontextprotocol/python-sdk/blob/1a9b7762c68a32021b7e60b91e2b86ef4820896a/src/mcp/os/win32/utilities.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/modelcontextprotocol/python-sdk/pull/1078/{{ revealButtonHref }}
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
jingx8885https://github.com/jingx8885
Jul 8, 2025https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#r2191332123
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
@felixweinbergerhttps://github.com/felixweinberger
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
felixweinbergerhttps://github.com/felixweinberger
Jul 8, 2025https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#r2192116630
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
https://github.com/modelcontextprotocol/python-sdk/pull/1078/files#diff-0adc630bbecb11fd2fe8fc302a21e9afe0ebb9c3ae019a95d9bf84817cf73f61
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
Please reload this pagehttps://github.com/modelcontextprotocol/python-sdk/pull/1078/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.