ওপেন টার্মিনাল ছাড়াই উইন্ডোজ 10 এ ব্যাশ পটভূমি প্রক্রিয়া চালানো


13

আমি সাধারণত লিনাক্স সাবসিস্টেমটি ব্যবহার করি যখন আমি উইন্ডোজ 10 এ যে কোনও কিছু প্রোগ্রাম করি তাই আমার সমস্ত পাথ সম্পর্কিত ~। আমার একটি অজগর স্ক্রিপ্ট রয়েছে যা আমি প্রক্রিয়াটি না মেরে পটভূমিতে চিরকাল চলে। ওপেন টার্মিনাল ছাড়া উইন্ডোজ 10 ব্যাশে আমি কীভাবে এটি করব?

যে জিনিসগুলি আমি চেষ্টা করেছি:

  • bash -c "python3 script.py রান থেকে
  • nohup python3 -u script.py তারপরে টার্মিনালটি বন্ধ করে দিন।
  • setsid python3 script.py তারপরে টার্মিনালটি বন্ধ করে দিন।

এর কোনওটিই কাজ করেনি। এই কাজ করতে একটি উপায় আছে কি? বিকল্পভাবে, রাস্তাগুলি পরিবর্তন করার কোনও উপায় কি তাই যদি তারা কাজ করে তবে আমি ডাব্লু 10 থেকে স্ক্রিপ্টটি চালাই এবং প্রতিবার এগুলি ঘুরিয়ে না ফেলে ব্যাশ করি?

উত্তর:


7

ডাব্লুএসএলের সাম্প্রতিক সংযোজন ডাব্লুএসএল কমান্ডগুলি সরাসরি 'রান' বা স্টার্ট মেনু থেকে শুরু করার অনুমতি দেয়। আপনি কমান্ডটিতে একটি এম্পারস্যান্ড যুক্ত করতে পারেন (সাধারণ শেল আচরণ), যার ফলে একটি ক্ষণস্থায়ী bashটার্মিনাল আসে যা অবিলম্বে অদৃশ্য হয়ে যায় তবে কমান্ডটি অবিরত থাকে।

উদাহরণস্বরূপ, শুরু »রানের মধ্যে :

wsl sleep 20 &
wsl python -c 'import time; time.sleep(20);' &

আপনি যদি উইন্ডোজের টাস্ক ম্যানেজারে যান তবে এটি 20 সেকেন্ডের জন্য চলমান একটি আদেশ Sleepবা Python2কমান্ড দেখায় , তারপরে স্ব-সাফ করা।

একটি জিনিস আমি খুঁজে পেয়েছি হ'ল পরিবেশের ভেরিয়েবলগুলি উপলভ্য নয়। উদাহরণস্বরূপ, DISPLAYযদি উইন্ডোতে সাধারণ পদ্ধতিতে সেট করা থাকে তবে ডাব্লুএসএলকে দেওয়া হয় না। এর জন্য, এই ভেরিয়েবলগুলি পাস করার একটি উপায় থাকা দরকার। এমনকি যদি কমান্ড একটি কমান্ড লাইন আর্গুমেন্টের মাধ্যমে প্রয়োজনীয় ভেরিয়েবল সেট করার পক্ষে সমর্থন না করে তবে এটি bashনিজেই ব্যবহার করে করা সম্ভব :

# direct, command-dependent
wsl emacs --display=:0 &

# indirect, more flexible
wsl bash -c "DISPLAY=:0 emacs" &

এনবি: আমি বর্তমানে win10_64, সংস্করণ 1709 (ওএস বিল্ড 16299.64) চালাচ্ছি।


13

হালনাগাদ

মাইক্রোসফ্ট এই বিষয়টি সম্বোধন করেছে। পটভূমি / ডিমন প্রসেসগুলি এখন bash.exe(বা অন্যান্য ডাব্লুএসএল লঞ্চার প্রক্রিয়া) বন্ধ হয়ে যাওয়ার পরেও চলতে থাকবে । উইন 10 এর সাম্প্রতিক বিল্ড (পাবলিক রিলিজের জন্য বসন্ত 2018, 17046 বা তারও বেশি বিল্ড) প্রয়োজন।

নীচে উত্তরোত্তর জন্য সংরক্ষণ করা হয়।


দুঃখজনকভাবে / অযৌক্তিকভাবে, এটি করার কোনও উপায় নেই। মাইক্রোসফ্ট, তাদের অসীম জ্ঞানের ভিত্তিতে সিদ্ধান্ত নিয়েছে যে ডাব্লুএসএল (লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেম) কেবল তখনই চলবে যখন আপনার কোনও bash.exeপ্রক্রিয়া খোলা থাকবে। শেষটি বন্ধ করুন (বা সম্ভবত শেষ উইন্ডোটি বন্ধ করুন ; আমি নিশ্চিত নই যে এটি মাথাছাড়া চালানো সহ্য করবে কিনা) এবং ডাব্লুএসএল বন্ধ হয়ে যায় এবং এর সমস্ত প্রক্রিয়া মেরে ফেলেছে।

এর যৌক্তিকতা ছিল "রিসোর্স সংরক্ষণ", যা বিভিন্ন স্তরে অযৌক্তিক তবে উল্লেখযোগ্য কারণ, আমার কম্পিউটারে সেই সংস্থান রয়েছে এবং সেগুলি সেখানে ব্যবহার করার সুযোগ রয়েছে! আমি যদি কোনও প্রক্রিয়া চালাতে চাই তবে তা চালানো উচিত; আমি যদি এটি চালাতে না চাই তবে আমি এটি হত্যা করতে পারি। বিকাশকারী সরঞ্জাম হিসাবে সুস্পষ্টভাবে উদ্দেশ্যযুক্ত কোনও কিছুর জন্য এটি কখনও কখনও মনে হয় যে ডাব্লুএসএল কেবল প্লেিং হিসাবে ব্যবহারযোগ্য এবং তার ব্যবহারকারীরা কী করছেন তা জানতে বিশ্বাস করা যায় না।

যাহাই হউক না কেন, আপনি এই সুনির্দিষ্ট করা থাকে, জন্য ভোট চান তাহলে cron কাজ, ডেমন ও ব্যাকগ্রাউন্ড টাস্ক সক্ষম করার বিষয়টি বিবেচনার উপর UserVoice পৃষ্ঠা । এটি বর্তমানে দ্বিতীয় সর্বাধিক ভোট-প্রাপ্ত অনুরোধ, এবং এটি "ব্যাকলগে"।


"সবচেয়ে উল্লেখযোগ্য কারণ, অভিশাপ, আমার কম্পিউটারে সেই সংস্থান রয়েছে এবং তারা সেখানে ব্যবহার করতে পারে" খুব ভালভাবে বলা যায়! এটি সত্যিই মনের ভাব ঘটাচ্ছে ...
এয়ারট্রাইক 0:

আমি 17134 তৈরি করেছি এবং ব্যাশ উইন্ডো ছাড়া পটভূমি কাজ করতে পারি না।
জন পিক

@ জনপিক তারা পুনরায় বুট করার পরে স্বয়ংক্রিয়ভাবে চালু হবে না, তবে উইন্ডোটি বন্ধ থাকাকালীন তাদের চলমান থাকা উচিত (যতক্ষণ না তারা এটির সাথে সংযুক্ত না থাকে, অবশ্যই)।
সিবিহ্যাকিং

@ সিবিহ্যাকিং আরও সুনির্দিষ্ট হওয়ার জন্য, আমি যদি পটভূমিতে একটি নোড.জেএস সার্ভার শুরু করি তবে এটি একটি কাজ ( jobs) এবং একটি প্রক্রিয়া ( ps aux) উভয়ই । আমি fgএটি অগ্রভাগে আনতে ব্যবহার করতে পারি। তবে, আমি শেষ বাশ উইন্ডোটি বন্ধ করে একটি নতুন বাশ উইন্ডো খোলার পরে, কাজটি চলে গেছে, প্রক্রিয়াটি এখনও চলছে, এবং আমি প্রক্রিয়াটি অগ্রভাগে সরাতে পারছি না। আমার পরিভাষা বন্ধ থাকলে দুঃখিত।
জন পিক

@ জনপিক আহ, এটি সম্পূর্ণ আলাদা ইস্যু - এই প্রশ্নটি প্রক্রিয়া সম্পর্কিত, শেল জব ম্যানেজমেন্ট সম্পর্কিত নয় - এবং অন্য কোথাও জিজ্ঞাসা করা উচিত ছিল, তবে উত্তরটি যথেষ্ট সহজ আমি এটিকে এখানে দেব: প্রক্রিয়াটি এর অধীনে tmuxবা screenসমর্থন করার জন্য অন্য টার্মিনালে পুনরায় সংযুক্তি। স্থানীয়ভাবে চলমান লিনাক্স (এবং অন্যান্য * নিক্স) মেশিনগুলির একই সীমাবদ্ধতা রয়েছে।
সিবিহ্যাকিং

2

হ্যাঁ, এই মুহূর্তে এটি "অসম্ভব"।

তবে কিছু কৌশল নিয়ে এটি ব্যাকগ্রাউন্ড প্রক্রিয়ার মতো "উপস্থিত" হওয়া সম্ভব। আমি এই কার্যকারিতাটি নিজেকে খুব খারাপভাবে চেয়েছিলাম তাই বেশ কয়েক ঘন্টা পরে আমি একটি ছদ্মবেশী কিন্তু কার্যক্ষম সমাধান নিয়ে এসেছি।

মূল বিষয়টি হ'ল একটি অদৃশ্য শেল তৈরি করা যা আপনি ডাব্লুএসএল বাশকে ভিবিএস স্ক্রিপ্ট দিয়ে চালু করেন launch তারপরে আপনি সেই স্ক্রিপ্টটি প্রারম্ভকালে চালাতে পারেন। যথাযথ কার্য শিডিউলিং কিছু অদ্ভুত কারণে কাজ করে না didn't

ডিমনগুলি সক্ষম করার জন্য লিনাক্স সাইডটিতে আপনার নিজস্ব প্রাথমিক প্রারম্ভিক সিস্টেম থাকতে পারে যা উদাহরণস্বরূপ .bashrc কে আপত্তি দেয়।

প্রক্রিয়াটি এখানে এই দস্তাবেজটিতে বিস্তারিত রয়েছে আমি https://emil.fi/bashwin লিখেছি । আমি টাস্ক মনিটরিং বাস্তবায়ন করি নি তবে এটি প্রসারিত করা খুব সহজ হওয়া উচিত।


2

আপনি কি এই সমাধান চেষ্টা করেছেন ?

এটি কোনও লুকানো অ্যাপ্লিকেশন চালু করতে একটি ডাব্লুএসএইচ সহায়ক ব্যবহার করে।

তারপরে আপনি লগইন করার সময় কমান্ডটি চালু করতে আপনি সাকডিয়ুলারে কেবলমাত্র একটি নতুন টাস্ক তৈরি করতে পারেন। কিছুটা এইরকমwscript <path to runHidden.vbs> bash.exe -c "python script.py"


2

এটি আমাকে চিরকালের জন্য নিয়ে গেছে তবে আমি এটি করার একটি বোকামি জটিল পদ্ধতি খুঁজে পেয়েছি (একটি ব্যাচের ফাইল থেকে):

start bash -c "DISPLAY=:0 [command] & (sleep 0.5 && kill -n 9 $$)"

এটি কী করে এবং কেন এটির একটি ব্রেকডাউন:

  • `start`: ব্যাচের ফাইল উইন্ডোটি দূরে সরাতে
  • `bash -c`: আপনাকে বাশ কমান্ড চালাতে দেয়
  • `DISPLAY =: 0`: আপনার এক্স-সার্ভারটি সেট করে
  • `[কমান্ড]`: আপনার আদেশ / আদেশগুলি (command [কমান্ড && [আদেশ] `)
  • `&`: পরবর্তী কমান্ড রান করতে পরে এটি শুরু হয় এবং যখন এটি হচ্ছে সম্পন্ন
  • `0.5 0.5`: প্রক্রিয়াটি শুরু হয়েছে তা নিশ্চিত করতে
  • `&&`: পরবর্তী কমান্ডটি কাজ শেষ হওয়ার পরে চালানো হবে এবং এটি শুরু হওয়ার পরে নয়
  • `কিল-এন 9 $$`: বাশ শেলটি মারতে যাতে এটি কেবল গ্রাফিকাল অ্যাপ্লিকেশন

দ্রষ্টব্য: DISPLAY=:0এটি এক্স-সার্ভারে সেট করে :0। এটিকে পরিবর্তন করতে (যেমন) :1, DISPLAY=:1ইত্যাদি করুন

দ্রষ্টব্য: startকেবলমাত্র এটি প্রয়োজনীয় যদি এটি কোনও ব্যাচ স্ক্রিপ্ট থেকে থাকে। যদি এটি টার্মিনাল থেকে আসে তবে আপনার এটির দরকার নেই

দ্রষ্টব্য: sleepপ্রতিটি অ্যাপ্লিকেশনের জন্য আলাদাভাবে সেট করা দরকার। এমনকি আপনি এটি বাদ দিতেও হতে পারে।


0

আমি জানি না যে http://tools.sysprogs.org/srvman/ থেকে উইন্ডোজ সার্ভিস ম্যানেজার (শ্র্বমন) আপনার পক্ষে কতটা ভাল কাজ করবে, তবে এটি অন্যান্য প্রোগ্রামের জন্য আমার পক্ষে কাজ করেছে। আসলে, আমি "bash.exe" চালানোর চেষ্টা করেছিলাম এটি পরিষেবা হিসাবে কাজ করে কিনা তা দেখার জন্য, এবং আমি অনুমান করছি যে ল্যাম্পকে ব্যাকগ্রাউন্ডে আসলে কাজ করতে পেতে আমাকে আরও কিছুটা টিনক করতে হবে।


1
এই ব্যাকগ্রাউন্ডে পাইথন স্ক্রিপ্টটি কীভাবে চালানো হবে এই প্রশ্নটি কীভাবে সমাধান করবে?
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.