相关疑难解决方法(0)

分段错误如何在后台工作?

除了“CPU 的 MMU 发送信号”和“内核将其定向到违规程序并终止它”之外,我似乎找不到任何关于此的信息。

我认为它可能将信号发送到外壳,外壳通过终止违规进程和打印来处理它"Segmentation fault"。所以我通过编写一个我称之为crsh(废话 shell)的极简 shell 来测试这个假设。除了获取用户输入并将其提供给system()方法之外,此外壳不执行任何操作。

#include <stdio.h>
#include <stdlib.h>

int main(){
    char cmdbuf[1000];
    while (1){
        printf("Crap Shell> ");
        fgets(cmdbuf, 1000, stdin);
        system(cmdbuf);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我在一个裸终端中bash运行了这个 shell(没有在下面运行)。然后我继续运行一个产生段错误的程序。如果我的假设是正确的,这将 a) 崩溃crsh,关闭 xterm,b) 不打印"Segmentation fault",或 c) 两者兼而有之。

braden@system ~/code/crsh/ $ xterm -e ./crsh
Crap Shell> ./segfault
Segmentation fault
Crap Shell> [still running]
Run Code Online (Sandbox Code Playgroud)

回到第一个,我猜。我刚刚证明了不是外壳执行此操作,而是下面的系统。“分段错误”是如何打印出来的?“谁”在做?内核?还有什么?信号及其所有副作用如何从硬件传播到程序的最终终止?

shell kernel signals segmentation-fault

272
推荐指数
4
解决办法
4万
查看次数

在 Debian 中编写 C#

我想在 Debian 系统上学习 C#。

我必须安装什么?

是否有类似交互式提示之类的东西,我可以在其中尝试运行代码片段?

我必须学习 C# 并且我有一台双启动计算机,但不想为了学习 C# 而关闭 Linux 并启动 Windows。

programming c# debian software-installation

7
推荐指数
1
解决办法
4060
查看次数

/proc/sys/fs/binfmt_misc/下的文件允许什么样的可执行格式?

我按照迈克尔的回复 来查看我的 Ubuntu 可以识别执行哪些可执行格式

$ ls -l /proc/sys/fs/binfmt_misc/
total 0
-rw-r--r-- 1 root root 0 Apr 19 16:11 cli
-rw-r--r-- 1 root root 0 Apr 19 16:11 jar
-rw-r--r-- 1 root root 0 Apr 19 16:11 python2.7
-rw-r--r-- 1 root root 0 Apr 19 16:11 python3.5
--w------- 1 root root 0 Apr 19 16:11 register
-rw-r--r-- 1 root root 0 Apr 19 16:11 status
Run Code Online (Sandbox Code Playgroud)

我从来没有故意改变那里的任何东西,这些文件是默认创建的,或者是在我安装其他一些程序时创建的。

$ cat /proc/sys/fs/binfmt_misc/cli
enabled
interpreter /usr/lib/binfmt-support/run-detectors
flags: 
offset 0
magic 4d5a
Run Code Online (Sandbox Code Playgroud)

这是一种什么样的可执行格式?我在 google 上搜索了“magic …

linux ubuntu executable binfmt

4
推荐指数
1
解决办法
1145
查看次数

为什么 pstree 显示我的脚本的名称而不是解释它的 shell 的名称?

我写了一个简单的shell脚本如下:

#!/bin/bash
sleep 90
Run Code Online (Sandbox Code Playgroud)

运行此 shell 后,我pstree在单独的 shell 中运行以查看进程树结构。

这是我看到的

-gnome-terminal-+-bash---sleepy.sh---sleep
Run Code Online (Sandbox Code Playgroud)

我期待这会像

-gnome-terminal-+-bash---bash---sleep
Run Code Online (Sandbox Code Playgroud)

为什么 shell 脚本被 pstree 表示为一个进程?该ps命令正确显示正在执行的命令为

10150  8771  0 08:13 pts/1    00:00:00 /bin/bash ./sleepy.sh
Run Code Online (Sandbox Code Playgroud)

这里的过程是 bash,而 sleepy.sh 是它的参数(这对我来说很有意义)。在我看来,一个进程必须是一个可执行链接格式的二进制文件 (ELF)。Bash 是一个 ELF 可执行文件,但 shell 脚本不是,因此我认为pstree不应该这样显示它?

shell process

3
推荐指数
1
解决办法
638
查看次数

Linux 上有哪些类型的可执行文件?

例如,如果我这样做

[OP@localhost executable]$ cat garbage 
lalala
trololol
[OP@localhost executable]$ chmod +x garbage
[OP@localhost executable]$ ./garbage 
./garbage: line 1: lalala: command not found
./garbage: line 2: trololol: command not found
Run Code Online (Sandbox Code Playgroud)

Bash 似乎试图将这个“可执行文件”解释为脚本。但是,有两种情况显然不会发生这种情况:文件以#!, 和 ELF 文件开头。还有吗?某处是否有关于此的全面文档?

linux executable

1
推荐指数
1
解决办法
531
查看次数

为什么我静态编译的 BusyBox ARM 二进制文件可以在我的 x86_64 PC 上运行?

那里的情况有点奇怪。我为 ARM 平台(32 位)编译了 BusyBox 1.32.1 的静态可执行文件,奇怪的是它在两个平台上都没有问题。自己看:

root@smallbuntu /m/n/b/i/n/rootfs# readelf -h bin/busybox-initrd
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x1f419
  Start of program headers:          52 (bytes into file)
  Start of section headers:          1482800 (bytes into file)
  Flags:                             0x5000002, Version5 …
Run Code Online (Sandbox Code Playgroud)

busybox cross-compilation

1
推荐指数
1
解决办法
55
查看次数

在 wine 下运行 Windows 可执行文件时,可以在 $PATH 中搜索它吗?

$ echo $PATH
/home/t/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

$ which PDFXCview.exe
/home/t/bin//PDFXCview.exe

$ ls /home/t/bin/PDFXCview.exe  -l
lrwxrwxrwx 1 t t 97 Mar 18 09:20 /home/t/bin/PDFXCview.exe -> ../program_files/document/formats/pdf/TrackerSoftware/pdfxcview/pdfxchange_portable/PDFXCview.exe
Run Code Online (Sandbox Code Playgroud)

现在,

$ wine /home/t/bin/PDFXCview.exe   &
[1] 23220
Run Code Online (Sandbox Code Playgroud)

但即使PDFXCview.exe可以在 中搜索$PATH

$ wine PDFXCview.exe
wine: cannot find L"C:\\windows\\system32\\PDFXCview.exe"
Run Code Online (Sandbox Code Playgroud)

失败是因为它PDFXCview.exe没有作为命令名称出现在 中wine PDFXCview.exe,所以没有在 中搜索到吗$PATH

有什么办法可以PDFXCview.exewine PDFXCview.exe搜索中进行吗$PATH

谢谢。

path wine

0
推荐指数
1
解决办法
1486
查看次数