প্রস্থান ছাড়াই এসবিটি স্টপ চালান


120

আপনি কীভাবে প্রস্থান না করে এসবিটি-র কোনও রান শেষ করবেন?

আমি সিটিআরএল + সি চেষ্টা করছি তবে এটি এসবিটি থেকে বেরিয়ে আসে। এসবিটি খোলা রেখে কেবল চলমান অ্যাপ্লিকেশন থেকে প্রস্থান করার কোনও উপায় আছে কি?


Ctrl+Dকাজ করে না.
botchniaque

আমি মনে করি Ctrl + Dকেবল প্লে কাঠামোর জন্য কাজ করে।
এনভেরোসমানভ

উত্তর:


44

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

আপনি যদি ফোর্কিং- তে বর্ণিত হিসাবে আলাদা, কাঁটাযুক্ত জেভিএম দিয়ে নিজের রান করেন তবে আপনি যে জেভিএম (যে কোনও উপায়ে আপনার অপারেটিং সিস্টেম অফার করে) এসবিটির জেভিএমকে প্রভাবিত না করে হত্যা করতে পারেন:

fork in run := true

9
আমি এটি করার চেষ্টা করছি। বিশেষ করে, আমি বাস্তবায়িত করেছি: stackoverflow.com/questions/3868863/... কিন্তু SBT এখনও প্রস্থানের আমি কি যখন এবার CTRL + সি। আমি কীভাবে কেবল কাঁটাযুক্ত জেভিএমকে হত্যা করব?
dsg

2
সঙ্গে killকম্যান্ড লাইন থেকে, অথবা টাস্ক ম্যানেজার (উইন্ডোজ), অথবা ফোর্স ছাড়ো অথবা কার্যকলাপ মনিটর (Mac OS X এর), ইত্যাদি
শেঠ Tisue

: Forking পর SBT ছাড়া সবকিছু জাভা হত্যা করতে, চালানোkill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
dsg

1
আমি এই ধারণাটি ভালবাসি, তবে এটি সাহায্য করবে বলে মনে হয় না। আমি 0.13.1 এসবিটি চালাচ্ছি এবং আমার বিল্ড.এসবিটি ফাইলে এই লাইনটি যুক্ত করছি ..
two1ejack

আপনার runসিটিআরএল + ডি
টিমোফাই

82

এসবিটি সংস্করণ 0.13.5 থেকে আপনি আপনার বিল্ড.এসবিটিতে যুক্ত করতে পারেন

cancelable in Global := true

এটি "সক্ষম (সত্য) হিসাবে বা সিটিটিআর + সি দিয়ে টাস্ক এক্সিকিউশন বাধা দেওয়ার (মিথ্যা) সক্ষম হিসাবে সংজ্ঞায়িত হয়। মধ্যে কী সংজ্ঞা

আপনি যদি স্কেলা 2.12.7+ ব্যবহার করেন তবে আপনি সিটিআরএল + সি সহ সংকলনটি বাতিলও করতে পারেন। রেফারেন্স https://github.com/scala/scala/pull/6479

কিছু বাগ রিপোর্ট করা হয়েছে:


5

এসবিটি থেকে চালিত অ্যাপ্লিকেশনটির মূল লুপের উপর আমার নিয়ন্ত্রণ থাকলে আমি নিম্নলিখিতটি দরকারী পেয়েছি।

অ্যাপ্লিকেশনটি চালানোর সময় আমি কাঁটাচামচাকে বলি (বিল্ড.এসবিটিতে):

fork in run := true

আমি এসবিটি কে এসবিটি শেল থেকে অ্যাপ্লিকেশনটিতে (বিল্ড.এসবিটিতে) ফরোয়ার্ড করতে বলি:

connectInput in run := true

পরিশেষে, অ্যাপ্লিকেশনটির মূল থ্রেডে, আমি স্টিডিন-এ-ফাইলের শেষের জন্য অপেক্ষা করি এবং তারপরে জেভিএম বন্ধ করে দেব:

while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)

অবশ্যই, আপনি মূল থ্রেডই নয় স্ট্যান্ডিন এবং শাটডাউন পড়তে যে কোনও থ্রেড ব্যবহার করতে পারেন।

অবশেষে, এসবিটি শুরু করুন, runচ্ছিকভাবে আপনি যে সাব-প্রজেক্টটি চালাতে চান তা চালান, চালান।

এখন, আপনি যখন প্রক্রিয়াটি থামাতে চান, এসবিটি শেলটিতে CTRL-D লিখে এটির স্টিডিনটি বন্ধ করুন।


1

এসবিটি-রিভলবার ব্যবহার বিবেচনা করুন । আমরা এটি আমাদের সংস্থায় ব্যবহার করি এবং এটি সত্যই কার্যকর। আপনি যা জিজ্ঞাসা করছেন তার জন্য এটি করা যেতে পারে:

reStart

reStop

বিল্ড.এসবিটি ফাইলটি কনফিগার করার প্রয়োজন ছাড়াই।

আপনি এই প্লাগইনটি যুক্ত করে ব্যবহার করতে পারেন:

addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")

আপনার প্রকল্পে / plugins.sbt

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