প্রশ্নের সঠিকভাবে বাক্য গঠন করা আমার পক্ষে কঠিন মনে হয়েছে তবে আমি আমার সেরাটা দেব। আমি dwm
আমার ডিফল্ট উইন্ডো ম্যানেজার হিসাবে ব্যবহার করি এবংdmenu
আমার অ্যাপ্লিকেশন লঞ্চার হিসাবে আমি আমার ব্রাউজারটি বাদ দিয়ে জিইআইআই অ্যাপ্লিকেশনগুলি খুব কম ব্যবহার করি। আমার বেশিরভাগ কাজ সরাসরি কমান্ড লাইন থেকে সম্পন্ন হয়। তদ্ব্যতীত, অপারেটিং সিস্টেম, অ্যাপ্লিকেশন ইত্যাদির বিষয়ে আমি ন্যূনতমতাবাদের দুর্দান্ত অনুরাগী the আমি যে সরঞ্জামগুলি থেকে কখনই মুক্তি পাইনি সেগুলির মধ্যে একটি হ'ল অ্যাপ্লিকেশন লঞ্চার। মূলত কারণ অ্যাপ্লিকেশন প্রবর্তকরা কীভাবে কাজ করে / তারা কী করে তা সম্পর্কে আমার একটি সুনির্দিষ্ট বোঝার অভাব রয়েছে। এমনকি বিস্তৃত ইন্টারনেট অনুসন্ধান কেবল অস্পষ্ট ব্যাখ্যা দেখায়। আমি যা করতে চাই তা হ'ল আমার অ্যাপ্লিকেশন লঞ্চারটি থেকে মুক্তিও পারা যায় কারণ অ্যাপ্লিকেশনটি স্প্যানিংয়ের পরিবর্তে আমার এর কোনও ব্যবহার নেই। এটি করার জন্য আমি শেল থেকে অ্যাপ্লিকেশনগুলিকে "সঠিকভাবে" কীভাবে শুরু করতে পারি তা সত্যিই জানতে চাই। যার মাধ্যমে "সঠিকভাবে" এর অর্থ "অ্যাপ্লিকেশন লঞ্চারের মতো" দ্বারা প্রায় অনুমান করা যায়।
আমি শেল থেকে প্রক্রিয়াগুলি স্পন করার জন্য নিম্নলিখিত উপায়গুলি সম্পর্কে জানি:
exec /path/to/Program
একটি নতুন প্রক্রিয়া তৈরি না করে নির্দিষ্ট কমান্ডের সাথে শেলটি প্রতিস্থাপন করুনsh -c /path/to/Program
শেল নির্ভর প্রক্রিয়া আরম্ভ করুন/path/to/Program
শেল নির্ভর প্রক্রিয়া আরম্ভ করুন/path/to/Program 2>&1 &
শেল স্বাধীন প্রক্রিয়া প্রবর্তনnohup /path/to/Program &
শেল স্বাধীন প্রক্রিয়া আরম্ভ করুন এবং আউটপুট পুনর্নির্দেশnohup.out
আপডেট 1: আমি উদাহরণ দিয়ে বলতে পারি যে উদাহরণগুলি dmenu
বারবার কল থেকে ps -efl
বিভিন্ন অবস্থার অধীনে এটি পুনর্গঠন করে does এটি একটি নতুন শেল /bin/bash
এবং এই শেলটির শিশু হিসাবে অ্যাপ্লিকেশনটি তৈরি করে /path/to/Program
। বাচ্চা এতক্ষণ যতক্ষণ থাকে ততক্ষণ শেল চারপাশে থাকবে। যদি আপনি সমস্যা (এটা কিভাবে পরিচালনা করে এই আমাকে পরলোক হল ...) বিপরীতে nohup /path/to/Program &
একটি শেল থেকে /bin/bash
তারপর প্রোগ্রাম এই শেল সন্তান হয়ে যাবে কিন্তু আপনি যদি এই শেল থেকে প্রস্থান প্রোগ্রামের পিতা বা মাতা সর্বোচ্চে প্রক্রিয়া হতে হবে। সুতরাং যদি প্রথম প্রক্রিয়াটি উদাহরণস্বরূপ ছিল /sbin/init verbose
এবং এটির PPID 1
পরে এটি প্রোগ্রামটির পিতামাতা হবে। এখানে কি আমি একটি গ্রাফ ব্যবহার ব্যাখ্যা করার চেষ্টা করে: chromium
চালু করা হয় মাধ্যমে dmenu
, firefox
ব্যবহার চালু করা হয় exec firefox & exit
:
systemd-+-acpid
|-bash---chromium-+-chrome-sandbox---chromium-+-chrome-sandbox---nacl_helper
| | `-chromium---5*[chromium-+-{Chrome_ChildIOT}]
| | |-{Compositor}]
| | |-{HTMLParserThrea}]
| | |-{OptimizingCompi}]
| | `-3*[{v8:SweeperThrea}]]
| |-chromium
| |-chromium-+-chromium
| | |-{Chrome_ChildIOT}
| | `-{Watchdog}
| |-{AudioThread}
| |-3*[{BrowserBlocking}]
| |-{BrowserWatchdog}
| |-5*[{CachePoolWorker}]
| |-{Chrome_CacheThr}
| |-{Chrome_DBThread}
| |-{Chrome_FileThre}
| |-{Chrome_FileUser}
| |-{Chrome_HistoryT}
| |-{Chrome_IOThread}
| |-{Chrome_ProcessL}
| |-{Chrome_SafeBrow}
| |-{CrShutdownDetec}
| |-{IndexedDB}
| |-{LevelDBEnv}
| |-{NSS SSL ThreadW}
| |-{NetworkChangeNo}
| |-2*[{Proxy resolver}]
| |-{WorkerPool/1201}
| |-{WorkerPool/2059}
| |-{WorkerPool/2579}
| |-{WorkerPool/2590}
| |-{WorkerPool/2592}
| |-{WorkerPool/2608}
| |-{WorkerPool/2973}
| |-{WorkerPool/2974}
| |-{chromium}
| |-{extension_crash}
| |-{gpu-process_cra}
| |-{handle-watcher-}
| |-{inotify_reader}
| |-{ppapi_crash_upl}
| `-{renderer_crash_}
|-2*[dbus-daemon]
|-dbus-launch
|-dhcpcd
|-firefox-+-4*[{Analysis Helper}]
| |-{Cache I/O}
| |-{Cache2 I/O}
| |-{Cert Verify}
| |-3*[{DOM Worker}]
| |-{Gecko_IOThread}
| |-{HTML5 Parser}
| |-{Hang Monitor}
| |-{Image Scaler}
| |-{JS GC Helper}
| |-{JS Watchdog}
| |-{Proxy R~olution}
| |-{Socket Thread}
| |-{Timer}
| |-{URL Classifier}
| |-{gmain}
| |-{localStorage DB}
| |-{mozStorage #1}
| |-{mozStorage #2}
| |-{mozStorage #3}
| |-{mozStorage #4}
| `-{mozStorage #5}
|-gpg-agent
|-login---bash---startx---xinit-+-Xorg.bin-+-xf86-video-inte
| | `-{Xorg.bin}
| `-dwm-+-dwmstatus
| `-xterm---bash-+-bash
| `-pstree
|-systemd---(sd-pam)
|-systemd-journal
|-systemd-logind
|-systemd-udevd
|-wpa_actiond
`-wpa_supplicant
আপডেট 2: আমি অনুমান করি যে প্রশ্নটি এ পর্যন্ত সিদ্ধ করা যেতে পারে: একটি প্রক্রিয়াটির পিতামাতার কী হওয়া উচিত? এটি উদাহরণস্বরূপ একটি শাঁস হওয়া উচিত বা এটি init
প্রক্রিয়া হওয়া উচিত প্রক্রিয়া সহ PID 1
?
init
- যার উত্তরটি হতে পারে ... সম্ভবত? এটি কীভাবে / যদি আপনি এটির সাথে কথা বলার পরিকল্পনা করেন, init
আপনি কী ব্যবহার করেন এবং ডেটা চ্যানেলগুলি কোথায় তা নির্ভর করে depends সাধারণভাবে সেই জিনিসগুলি নিজেই কাজ করার প্রবণতা রাখে - এটাই তার init
জন্য। যে কোনও ক্ষেত্রে, সাধারণত যখন আপনি তখন কোনও প্রক্রিয়াটি ডিমনাইজ করেন init
। অথবা আপনি যদি চাকরি নিয়ন্ত্রণ চান, বর্তমান শেল।
dmenu
এবং যা শিখেছি তার সাথে আমি কীভাবে এগিয়ে যাব তা দেখব। আমি খুঁজে পেতে exec /path/to/Program & exit
বা /bin/bash -c /path/to/Program & exit
বেশ ব্যবহারযোগ্য হতে হবে। তবে তারা সকলেই 1
অর্থাত্ init
এর পিতামাতার Program
সাথে আমার পক্ষে ঠিক আছে যতক্ষণ না এটি বোধগম্য হয় এবং কোনও মৌলিক *nix
নীতি লঙ্ঘন করে না ।
exec &
, আমার মনে হয়। আমি সাধারণত টার্মিনাল থেকে আমার জিনিসগুলি করি ... সম্ভবত আপনি এখানে বেন ক্রলের প্রশ্ন থেকে কিছুটা উপকার পাবেন । আমার সেখানে একটি উত্তর আছে, তবে তাদের সবগুলি খুব ভাল। যাইহোক, আপনি যখন কোনও প্রক্রিয়া ব্যাকগ্রাউন্ড করেন এবং এর পিতামাতার মতো মারা যায়: sh -c 'cat & kill $$'
আপনি এটি অনাথ হন, এবং এটি শেষ পর্যন্ত কাটা পেতে শুরু করে। এটাই ইনিশের কাজ - এজন্য তারা সকলেই এতে পড়ে fall
systemd--bash--chromium
। আমি systemd--chromium
যখন শেল থেকে ফায়ার ফক্স স্প্যান করি তখন সমস্ত পদ্ধতি যা আমি চেষ্টা করি তা শেষ পর্যন্ত নীচের ফর্মের একটি প্রক্রিয়া গাছের দিকে নিয়ে যায় । শেলটি এখানে কীভাবে তৈরি হয়? এটি কোনও টার্মিনালের সাথে সম্পর্কিত নয়।