Avsluta process/program i Raspbian

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
tecno
Inlägg: 27022
Blev medlem: 6 september 2004, 17:34:45
Skype: tecnobs
Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
Kontakt:

Re: Avsluta process/program i Raspbian

Inlägg av tecno »

Kanske denna sidan kan reda ut lite command line grejer för dig

https://www.raspberrypi.org/documentati ... ommands.md
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Avsluta process/program i Raspbian

Inlägg av Klas-Kenny »

Magnus_K skrev:Det jag fortfarande är genuint kass på är att få till alla argument rätt i terminalen när man tex ska kompilera, köra, kopiera, radera etc etc, men det kommer väl med tiden.

Så är det, det blir bättre med tiden.

Sen handlar mycket också om att lära sig att läsa och tolka funktionernas hjälptexter (typiskt kommando -h eller kommando --help), och manualen (man kommando, om man sitter på ett system med manualen installerad, annars samma sak skrivet i google). :)
Kulla
Inlägg: 1264
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Avsluta process/program i Raspbian

Inlägg av Kulla »

Det tar sin tid, men du kan få rätt mycket hjälp här på forumet :)

Jag själv har jobbat med linux sista 20 år, så en del av saker man tar för givet eftersom de sitter i ryggmärgen, men skriv gärna när du behöver något hjälp.

Bli försiktigt med sudo, den kan bli både hjälpsam och skadligt, så använd den bara när du måste.

För att få alla argument till kommando du ska använda, använd kommando_namn --help, du borde få allt där, sen om det räcker inte, då är det man kommando_namn som du ska kolla nästa, där du har manual för den kommando du vill ha och sen om det hjälper inte heller, hojta till här så vi hjälper dig ;)
Nerre
Inlägg: 26655
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Avsluta process/program i Raspbian

Inlägg av Nerre »

När det gäller cd .. är det mycket riktigt mellanslaget som linux kräver men Windows struntar i.

Jag tycker att det är bra att förklara varför när man säger åt nån att "då ska du köra xxx istället". Jag hatar när det är guider som bara rabblar upp en massa kommandon utan att förklara nyttan med dem.

Sidan som tecno länkar till ser ut att vara rätt bra.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Avsluta process/program i Raspbian

Inlägg av Magnus_K »

Super med all support!
Jag ska inte tjata ihjäl er med dumheter, men som exempel så händer följande rätt ofta, och jag blir då helt handlingsförlamad:

"Någon guide" på nätet skriver att man ska köra följande kommando för att få önskat resultat:
sudo g++ -lwiringPi TX_Demo.cpp cc1100_raspi.cpp -o TX_Demo

Visst fungerar det kanon, men jag vill veta mer.
Det jag vet är följande:
  • * Mest troligt måste köra det som superuser,
    * använda mig av kompilatorn g++,
    * filen som ska kompileras är TX_Demo.cpp,
    * och den körbara filen ska heta TX_Demo.
Pusselbitarna som saknas är således lwiringPi och cc1100_raspi.cpp.
Det finns ingen man-fil för g++ men en hjälp, den ser ut som nedan.
Om jag minns rätt så läste jag någonstans att man ska sätta ett "l" före wiringPi om man använder det, men hur kommer det in i bilden över huvudtaget? Vad gör också filen cc1100_raspi.cpp i det här kommandot? (det är en fil i mappen som mycket riktigt heter så men försöker förstå lite mer)

Kod: Markera allt

Usage: g++ [options] file...
Options:
  -pass-exit-codes         Exit with highest error code from a phase.
  --help                   Display this information.
  --target-help            Display target specific command line options.
  --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...].
                           Display specific types of command line options.
  (Use '-v --help' to display command line options of sub-processes).
  --version                Display compiler version information.
  -dumpspecs               Display all of the built in spec strings.
  -dumpversion             Display the version of the compiler.
  -dumpmachine             Display the compiler's target processor.
  -print-search-dirs       Display the directories in the compiler's search path.
  -print-libgcc-file-name  Display the name of the compiler's companion library.
  -print-file-name=<lib>   Display the full path to library <lib>.
  -print-prog-name=<prog>  Display the full path to compiler component <prog>.
  -print-multiarch         Display the target's normalized GNU triplet, used as
                           a component in the library path.
  -print-multi-directory   Display the root directory for versions of libgcc.
  -print-multi-lib         Display the mapping between command line options and
                           multiple library search directories.
  -print-multi-os-directory Display the relative path to OS libraries.
  -print-sysroot           Display the target libraries directory.
  -print-sysroot-headers-suffix Display the sysroot suffix used to find headers.
  -Wa,<options>            Pass comma-separated <options> on to the assembler.
  -Wp,<options>            Pass comma-separated <options> on to the preprocessor.
  -Wl,<options>            Pass comma-separated <options> on to the linker.
  -Xassembler <arg>        Pass <arg> on to the assembler.
  -Xpreprocessor <arg>     Pass <arg> on to the preprocessor.
  -Xlinker <arg>           Pass <arg> on to the linker.
  -save-temps              Do not delete intermediate files.
  -save-temps=<arg>        Do not delete intermediate files.
  -no-canonical-prefixes   Do not canonicalize paths when building relative
                           prefixes to other gcc components.
  -pipe                    Use pipes rather than intermediate files.
  -time                    Time the execution of each subprocess.
  -specs=<file>            Override built-in specs with the contents of <file>.
  -std=<standard>          Assume that the input sources are for <standard>.
  --sysroot=<directory>    Use <directory> as the root directory for headers
                           and libraries.
  -B <directory>           Add <directory> to the compiler's search paths.
  -v                       Display the programs invoked by the compiler.
  -###                     Like -v but options quoted and commands not executed.
  -E                       Preprocess only; do not compile, assemble or link.
  -S                       Compile only; do not assemble or link.
  -c                       Compile and assemble, but do not link.
  -o <file>                Place the output into <file>.
  -pie                     Create a position independent executable.
  -shared                  Create a shared library.
  -x <language>            Specify the language of the following input files.
                           Permissible languages include: c c++ assembler none
                           'none' means revert to the default behavior of
                           guessing the language based on the file's extension.

Options starting with -g, -f, -m, -O, -W, or --param are automatically
 passed on to the various sub-processes invoked by g++.  In order to pass
 other options on to these processes the -W<letter> options must be used.

For bug reporting instructions, please see:
<file:///usr/share/doc/gcc-6/README.Bugs>.
Kulla
Inlägg: 1264
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Avsluta process/program i Raspbian

Inlägg av Kulla »

Du behöver inte köra som sudo så länge du inte installerar kompilerade programm till någon systemmapp som /usr/bin, /sbin, osv.

Rästen du har fattat bra, -o är namn på output programm, cc1100_raspi.cpp är källkod fil, c++ fil.

lwiringpi betyder använd library wiringpi som är GPIO Interface library for the Raspberry Pi
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Avsluta process/program i Raspbian

Inlägg av Magnus_K »

Ahaa ok. Nu har jag i och för sig inte testat utan sudo än, men ska försöka att alltid börja utan för att inte ställa till med något.
Men om cc1100_raspi.cpp är källkods-filen som ska kompileras, hur kommer då TX_Demo.cpp in i bilden? det känns som att det är en C++ fil för mycket med i kommandot?

l = library :tumupp:
Borre
Inlägg: 4564
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Avsluta process/program i Raspbian

Inlägg av Borre »

Nej bägge ska nog med, cc1100_raspi.cpp är sannolikt kod för radion och TX_Demo.cpp kod för "programmet" som använder sig av den första.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Avsluta process/program i Raspbian

Inlägg av sodjan »

Finns så klart massor av beskrivning ar av GCC/G++ process för kompilering/länkning,
men denna var en tidig träff och verkar ganska vettig:
https://www3.ntu.edu.sg/home/ehchua/pro ... _make.html

Där finns även en enkel (kanske förenklad, men i alla fall) bild av processen:
Bild

> det känns som att det är en C++ fil för mycket med i kommandot?

Du kan ha hur många källkodsfiler som du vill/behöver i kommandot.
Men normalt så hade jag kanske förväntat att cc1100_raspi hade varit
förkompilerad som en "library" (och alltså inkluderar med -l), men det
kanske finns någon anledning till att den kompileras varje gång.

TX_Demo.cpp bör vara det som är din "applikation". Inte cc1100_raspi,
det är bara olika funktioner till CC1100 modulen. Se även:
https://github.com/SpaceTeddy/CC1101/bl ... _raspi.cpp
"CC1100 Raspberry Pi Library". Det är alltså ett "bibliotek" med rutiner för
CC1100, även om det rent tekniskt inte hanteras som ett "library"... :-)
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Avsluta process/program i Raspbian

Inlägg av arvidb »

Magnus_K skrev:Ahaa ok. Nu har jag i och för sig inte testat utan sudo än, men ska försöka att alltid börja utan för att inte ställa till med något.
När du kör kommandot som root (med sudo) så skapas filen TX_Demo med ägare root - skriv 'ls -l' så ser du att filen ägs av root. Om du sedan försöker köra kommandot som din vanliga användare (utan sudo) så kommer det inte att ha rättighet att skriva över (ersätta) den tidigare skapta root-ägda filen och du får ett felmeddelande. Så ta bort den TX_Demo som du skapade som root innan du kör kommandot utan sudo.

Använd 'sudo rm TX_Demo' för detta.
Nerre
Inlägg: 26655
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Avsluta process/program i Raspbian

Inlägg av Nerre »

Jag skulle personligen inte kompilera som root bara för att det exekverbara programmet ska ägas av root.

Det är i såna fall bättre att köra "sudo chown root TX_Demo" efter kompileringen tycker jag.

Fördelen är att om kompileringen av nån anledning löper amok så vill man inte att kompilatorn körs som root med risken att den skriver över viktiga systemfiler (ok, just kompilering är kanske inte jättefarligt, men det är en bra vana att inte köra nåt som root förrän man behöver).


Det är lite lurigt att förstå hur en kompilator fungerar, är man van att kompilera en C-fil till en exekverbar fil så har man inte sett hela bilden.

Men som sodjans bild visar:

Först kompileras varje cpp-fil för sig (den körs genom pre-processor först). Det ger en massa så kallade "objektfiler", som alltså i princip innehåller kompilerade funktioner.

Sen länkas alla objektfiler, eventuellt tillsammans med externa libraries (som också är objektfiler). Länkaren tar normalt bara med de funktioner som anropas av en annan funktion (plus funktionen main(), som ju är programmets start).

Länkaren lägger alltså ett pussel kan man säga, det är det pusslet som blir ditt körbara program.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Avsluta process/program i Raspbian

Inlägg av Magnus_K »

Nu när ni säger det så kan det hända jag har gjort så här i något annat projekt också.
Dock väldigt "ovant" för mig att hantera mer än en källfil, projekten brukar liksom inte bli så omfattande :wink:

Misstänker man kan ganska snarlikt jämföra det med när man inkluderar en biblioteksfil i Arduino eller i annan platform. Varje gång jag då kompilerar källfilen så hänger dom länkade filerna med?
Det kanske är det här som är skillnaden om man gör en Build mot Build all, som finns i vissa miljöer?

Ska testa att göra lite ägarbyte och annat senare. Tror jag förstår allt ni skriver, för en gång skull.
Nerre
Inlägg: 26655
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Avsluta process/program i Raspbian

Inlägg av Nerre »

Vid större projekt så använder man ju oftast make.

Då kompileras alla .c och .cpp etc först var och en för sig (man har ett "recept" som säger att typ att ".c ska kompileras med gcc till en .obj och .cpp ska kompilera med g++ till en -obj"). Make är "smart" på så vis att den kollar tidsstämpeln på varje källkodsfil och objektfil. Om källkodsfilen är nyare än objektfilen så kompileras källkodsfilen om, men om objektfilen är nyare så struntar den normalt i att kompilera.

Sen när alla källkodsfiler är kompilerade så körs länk-kommandot.


I en make-fil kan man ha olika "targets", t.ex. "make clean" som alltså inte kompilerar nåt utan istället rensar alla "arbetsfoldrar" så man börjar om från början.


Googlade fram en enkelt tutorial om make, notera att de första exempel är spartanska, det är när du kommer ner till Makefile 3 och 4 börjar det se ut som det "brukar".
http://www.cs.colby.edu/maxwell/courses ... maketutor/

Här finns ett exempel på en make-fil som är mer "manuellt" skriven
https://www.gnu.org/software/make/manua ... efile.html
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Avsluta process/program i Raspbian

Inlägg av sodjan »

> Varje gång jag då kompilerar källfilen så hänger dom länkade filerna med?

Lite oklart vad "de länkade filerna" betyder, men om du menar "libraries"
så är det korrekta svaret "nej". Inga libraries används vid kompileringen,
de används vid länkningen.

Sen är det en annan sak att gcc/g++ automatiskt anropar länkaren åt dig,
men det är fortfarande rent tekniskt ett separat länknings steg.

Det som brukar kallas "Build" och "Build All" i en del miljöer är ofta en slags
inbyggd make funktion. "Build" kompilerar om det som behöver kompileras om.
"Build All" kompilerar om allt oavsett om det behövs eller inte.
Skriv svar